import type { AuditEventDetailDTO, AuditEventId, AuditEventListDTO, AuditEventPageDTO, AuditPageQuery } from '#/api/x/audit/events';
import type { AuditFieldDiff } from '#/components/FormExtraPanel/auditDiff';

export const AUDIT_QUERY_PERMISSION = 'audit.query';
export const AUDIT_DETAIL_PERMISSION = 'audit.detail';

export interface AuditOperation extends Omit<AuditEventListDTO, 'diffCount' | 'subEvents'> {
  correlationKey: string;
  diffCount: number;
  eventIds: AuditEventId[];
  layers: number[];
  sourceSummary: string;
  subEvents: AuditEventListDTO[];
}

export interface AuditEventDetail extends Omit<AuditEventDetailDTO, 'fieldDiffList'> {
  fieldDiffList: AuditFieldDiff[];
  fieldDiffParseError: boolean;
}

export interface AuditOperationPage extends Omit<AuditEventPageDTO, 'list'> {
  list: AuditOperation[];
}

export interface AuditOperationQuery {
  detail(eventId: AuditEventId): Promise<AuditEventDetail>;
  page(query: AuditPageQuery): Promise<AuditOperationPage>;
  timeline(targetId: string): Promise<AuditOperation[]>;
}

export type { AuditEventId, AuditEventListDTO, AuditPageQuery };
