import { defHttp } from '#/api/request';

export type DmsPrintType = 'ARCHIVE_BOX' | 'BLANK_FORM' | 'CONTROLLED_DOCUMENT' | 'LABEL' | 'OTHER' | 'RECORD_DOCUMENT';
export type DmsPrintSource = 'FILE_PREVIEW' | 'FORM_DETAIL' | 'LIST_BATCH';

export interface DmsPrintOperationTarget {
  batchNo?: string;
  documentCode?: string;
  documentId?: string;
  documentName?: string;
  targetId: string;
  targetType: 'BLANK_FORM' | 'BUSINESS_RECORD' | 'DOCUMENT';
  versionNo?: string;
}

export interface DmsPrintOperationCreateRequest {
  clientEventId: string;
  copies: number;
  printName: string;
  printType: DmsPrintType;
  remark?: string;
  sourceType: DmsPrintSource;
  targets: DmsPrintOperationTarget[];
}

export type DmsPrintOperationOptions = Omit<DmsPrintOperationCreateRequest, 'clientEventId' | 'copies'> & {
  clientEventId?: string;
  copies?: number;
};

export interface DmsPrintOperationLog {
  batchNo?: string;
  copies: number;
  documentCode: string;
  documentId?: string;
  documentName: string;
  id: string;
  operatedAt: string;
  operationId: string;
  operatorId: string;
  operatorName: string;
  printType: DmsPrintType;
  remark?: string;
  requestIp?: string;
  sourceMenuId?: string;
  sourceMenuName?: string;
  sourceType: DmsPrintSource;
  status: 'INITIATED';
  targetId: string;
  targetType: DmsPrintOperationTarget['targetType'];
  userAgent?: string;
  versionNo?: string;
}

export interface DmsPrintOperationQuery {
  batchNo?: string;
  currentPage: number;
  documentCode?: string;
  documentName?: string;
  endTime?: string;
  keyword?: string;
  operatorId?: string;
  operatorName?: string;
  pageSize: number;
  printType?: DmsPrintType;
  startTime?: string;
  versionNo?: string;
}

interface ApiResult<T> {
  code: number;
  data: T;
  msg?: string;
}

export interface PageResult<T> {
  list: T[];
  pagination: { currentPage: number; pageSize: number; total: number };
}

const prefix = '/api/dms/print-operations';
const silentErrorOptions = { errorMessageMode: 'none' as const };

export function createDmsPrintOperation(data: DmsPrintOperationCreateRequest) {
  return defHttp.post<ApiResult<{ operationId: string; recordCount: number }>>({ url: prefix, data }, silentErrorOptions);
}

export function getDmsPrintOperationPage(params: DmsPrintOperationQuery) {
  return defHttp.get<ApiResult<PageResult<DmsPrintOperationLog>>>({ url: prefix, params }, silentErrorOptions);
}

export function getDmsPrintOperationDetail(id: string) {
  return defHttp.get<ApiResult<DmsPrintOperationLog>>({ url: `${prefix}/${id}` }, silentErrorOptions);
}

export function exportDmsPrintOperations(params: DmsPrintOperationQuery) {
  return defHttp.get<Blob>({ url: `${prefix}/export`, params, responseType: 'blob' }, { isTransformResponse: false });
}
