import type { DmsPreviewResourceType } from './preview';
import type { DmsWatermarkParameters } from './watermarkParameters';

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

export interface DmsFilePrintTicketRequest extends DmsWatermarkParameters {
  copies?: number;
  requireSerialWatermark?: boolean;
  operationId: string;
  printPages?: string;
  resourceId: string;
  resourceType: DmsPreviewResourceType;
}

export interface DmsFilePrintTicket {
  accessTicket: string;
  copies: number;
  expiresAt: string;
  fileName: string;
  fileVersionId: string;
  mimeType?: string;
  printPages?: string;
  sizeBytes?: number;
}

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

export interface DmsPrintRenderItem {
  accessTicket: string;
  fileName: string;
  fileVersionId: string;
  printPages?: string;
}

export type DmsPrintRenderRequest = DmsPrintRenderItem | { items: DmsPrintRenderItem[]; source: DmsPrintRenderItem };

export function createDmsFilePrintTicket(data: DmsFilePrintTicketRequest) {
  return defHttp.post<DmsApiResult<DmsFilePrintTicket>>({ url: '/api/dms/file-print-tickets', data }, { errorMessageMode: 'none' });
}

export function getDmsFilePageCount(fileVersionId: string) {
  return defHttp.get<DmsApiResult<{ fileName: string; fileVersionId: string; pageCount: number }>>({
    url: `/api/dms/file-versions/${fileVersionId}/page-count`,
  });
}

export function renderDmsPrintPdf(data: DmsPrintRenderRequest) {
  return defHttp.post<Blob>(
    {
      url: '/api/biz/onlyoffice/dms-print/render',
      data,
      headers: { Accept: 'application/pdf' },
      responseType: 'blob',
    },
    { errorMessageMode: 'none', isTransformResponse: false },
  );
}
