import type { PageParam, PageResult } from '#/packages/effects/request/src';

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

export namespace MesPdArchiveApi {
  /** 归档台账（分页聚合） */
  export interface Archive {
    id?: number;
    /** 最新归档编号 */
    archiveCode?: string;
    /** 设计项目ID */
    projectId?: number;
    /** 任务编码 */
    taskCode?: string;
    /** 任务名称 */
    taskName?: string;
    /** 产品编码 */
    productCode?: string;
    /** 产品名称 */
    productName?: string;
    /** 该项目下归档记录总数 */
    archiveCount?: number;
    /** 归档人ID */
    archiver?: number;
    /** 归档人名称 */
    archiverNickname?: string;
    /** 归档状态（字典 mes_pd_archive_status） */
    archiveStatus?: number;
    /** 归档时间 */
    archiveTime?: number;
    /** 备注 */
    remark?: string;
    /** 创建时间 */
    createTime?: number;
    /** 更新人ID */
    updater?: string;
    /** 更新人名称 */
    updaterNickname?: string;
    /** 更新时间 */
    updateTime?: number;
  }

  export interface PageParams extends PageParam {
    archiveCode?: string;
    projectId?: number;
    archiveStatus?: number;
    productCode?: string;
    productName?: string;
  }

  /** 详情 - 项目信息 */
  export interface ProjectInfo {
    id?: number;
    taskCode?: string;
    taskName?: string;
    productCode?: string;
    productName?: string;
    version?: string;
    status?: number;
    chiefDesigner?: number;
    chiefDesignerNickname?: string;
    reviewer?: number;
    reviewerNickname?: string;
    planFinishTime?: number;
    remark?: string;
    createTime?: number;
  }

  /** 详情 - 归档记录 */
  export interface ArchiveInfo {
    id?: number;
    archiveCode?: string;
    archiver?: number;
    archiverNickname?: string;
    archiveStatus?: number;
    archiveTime?: number;
    remark?: string;
    createTime?: number;
  }

  /** 详情 - 设计资料 */
  export interface DocumentInfo {
    id?: number;
    documentType?: string;
    documentName?: string;
    documentVersion?: string;
    fileName?: string;
    fileUrl?: string;
    uploadUserId?: number;
    uploadUserNickname?: string;
    uploadTime?: number;
    remark?: string;
    createTime?: number;
  }

  /** 详情（按产品查询） */
  export interface DetailItem {
    project: ProjectInfo;
    archives: ArchiveInfo[];
    documents: DocumentInfo[];
  }
}

/** 归档台账分页（按项目/产品聚合） */
export function getPdArchivePage(params: MesPdArchiveApi.PageParams) {
  return requestClient.get<PageResult<MesPdArchiveApi.Archive>>(
    '/mes/pd/archive/page',
    { params },
  );
}

/** 归档台账详情（按产品编码查询） */
export function getPdArchiveDetailByProduct(productCode: string) {
  return requestClient.get<MesPdArchiveApi.DetailItem[]>(
    '/mes/pd/archive/detail-by-product',
    { params: { productCode } },
  );
}

export function getPdArchive(id: number) {
  return requestClient.get<MesPdArchiveApi.Archive>(
    `/mes/pd/archive/get?id=${id}`,
  );
}

export function updatePdArchive(data: MesPdArchiveApi.Archive) {
  return requestClient.put('/mes/pd/archive/update', data);
}

export function deletePdArchive(id: number) {
  return requestClient.delete(`/mes/pd/archive/delete?id=${id}`);
}

export function exportPdArchive(params: MesPdArchiveApi.PageParams) {
  return requestClient.download('/mes/pd/archive/export-excel', { params });
}
