import type { AuditOperationQuery } from '../events/types';

import { getAuditSignatureDetail, getAuditSignaturePage } from '#/api/x/audit/events';
import { parseAuditEventFieldDiffs } from '#/components/FormExtraPanel/auditDiff';

import { normalizeOperation } from '../events/auditOperation';

/** Electronic-signature query boundary backed only by audit_events.target_table=lims_sign. */
export const signatureOperationQuery: Pick<AuditOperationQuery, 'detail' | 'page'> = {
  async detail(eventId) {
    const response = await getAuditSignatureDetail(eventId);
    const detail = response.data;
    const parsedDiffs = parseAuditEventFieldDiffs(detail.fieldDiffList, detail.fieldDiffs);
    return {
      ...detail,
      fieldDiffList: parsedDiffs.diffs,
      fieldDiffParseError: parsedDiffs.parseError,
    };
  },

  async page(query) {
    const response = await getAuditSignaturePage(query);
    const page = response.data;
    return {
      list: Array.isArray(page?.list) ? page.list.map((event) => normalizeOperation(event)) : [],
      pagination: page?.pagination || {
        currentPage: query.currentPage,
        pageSize: query.pageSize,
        total: 0,
      },
    };
  },
};
