import type { PageParam, PageResult } from '@vben/request';

import type { SystemStorageApi } from '#/api/system/storage';

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

export namespace ResearchGuidelineApi {
  /** 课题指南 */
  export interface Guideline {
    id?: number;
    no?: string; // 指南编号，后端生成（GL 前缀）
    title: string; // 指南名称
    category: number; // 课题类别，字典 research_guideline_category
    applyStartTime?: string; // 申报开始时间
    applyEndTime?: string; // 申报截止时间
    content?: string; // 指南正文
    publishStatus?: number; // 发布状态，字典 research_guideline_status
    publishTime?: string; // 发布时间
    remark?: string; // 备注
    creator?: string; // 创建人 ID
    creatorName?: string; // 创建人姓名
    createTime?: string; // 创建时间
    attachmentList?: SystemStorageApi.StorageBlob[]; // 附件列表
    hasAttachment?: boolean; // 是否有附件
    blobIds?: number[]; // 提交时的附件 ID 列表（全量）
  }
}

/** 查询课题指南分页 */
export function getGuidelinePage(params: PageParam) {
  return requestClient.get<PageResult<ResearchGuidelineApi.Guideline>>(
    '/research/guideline/page',
    { params },
  );
}

/** 查询课题指南详情 */
export function getGuideline(id: number) {
  return requestClient.get<ResearchGuidelineApi.Guideline>(
    `/research/guideline/get?id=${id}`,
  );
}

/** 查询已发布的课题指南列表（供申报选指南） */
export function getPublishedGuidelineList() {
  return requestClient.get<ResearchGuidelineApi.Guideline[]>(
    '/research/guideline/published-list',
  );
}

/** 新增课题指南（草稿） */
export function createGuideline(data: ResearchGuidelineApi.Guideline) {
  return requestClient.post('/research/guideline/create', data);
}

/** 修改课题指南（仅草稿可改） */
export function updateGuideline(data: ResearchGuidelineApi.Guideline) {
  return requestClient.put('/research/guideline/update', data);
}

/** 删除课题指南（仅草稿且无申报书可删） */
export function deleteGuideline(id: number) {
  return requestClient.delete('/research/guideline/delete', {
    params: { id },
  });
}

/** 发布课题指南 */
export function publishGuideline(id: number) {
  return requestClient.put('/research/guideline/publish', null, {
    params: { id },
  });
}

/** 截止课题指南 */
export function closeGuideline(id: number) {
  return requestClient.put('/research/guideline/close', null, {
    params: { id },
  });
}
