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

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

export namespace AftersalesProblemApi {
  /** 售后问题 */
  export interface Problem {
    id?: number;
    no?: string;
    title?: string;
    sourceTicketId?: number;
    sourceTicketNo?: string;
    customerId?: number;
    customerName?: string;
    itemId?: number;
    itemCode?: string;
    itemName?: string;
    batchId?: number;
    batchCode?: string;
    issueType?: number;
    issueCategory?: string;
    severityLevel?: number;
    description?: string;
    /** 根因分类: 1-设计 2-物料 3-工艺 4-装配 5-运输 6-包装 7-使用 8-软件 9-其他 */
    rootCauseCategory?: number;
    rootCause?: string;
    solution?: string;
    /** 状态: 0-草稿 1-已发布 2-已停用 */
    status?: number;
    ownerUserId?: number;
    ownerUserName?: string;
    publishTime?: string;
    remark?: string;
    creator?: string;
    createTime?: string;
    updater?: string;
    updateTime?: string;
    /** 附件 blobId 列表（保存时传入） */
    blobIds?: number[];
    /** 附件列表（详情返回） */
    attachmentList?: { id: number; name?: string; url?: string }[];
  }
}

/** 新增售后问题（草稿） */
export function createProblem(data: AftersalesProblemApi.Problem) {
  return requestClient.post<number>('/aftersales/problem/create', data);
}

/** 更新售后问题（仅草稿） */
export function updateProblem(data: AftersalesProblemApi.Problem) {
  return requestClient.put<boolean>('/aftersales/problem/update', data);
}

/** 删除售后问题（仅草稿） */
export function deleteProblem(id: number) {
  return requestClient.delete<boolean>('/aftersales/problem/delete', {
    params: { id },
  });
}

/** 获取售后问题详情 */
export function getProblem(id: number) {
  return requestClient.get<AftersalesProblemApi.Problem>(
    `/aftersales/problem/get?id=${id}`,
  );
}

/** 分页查询售后问题 */
export function getProblemPage(params: PageParam) {
  return requestClient.get<PageResult<AftersalesProblemApi.Problem>>(
    '/aftersales/problem/page',
    { params },
  );
}

/** 发布问题（草稿/停用 -> 已发布） */
export function publishProblem(id: number) {
  return requestClient.put<boolean>('/aftersales/problem/publish', null, {
    params: { id },
  });
}

/** 停用问题（已发布 -> 停用） */
export function disableProblem(id: number) {
  return requestClient.put<boolean>('/aftersales/problem/disable', null, {
    params: { id },
  });
}

/** 参考检索（新工单受理，只返回已发布） */
export function referenceProblem(params: {
  itemId?: number;
  issueCategory?: string;
  issueType?: number;
  rootCauseCategory?: number;
  keyword?: string;
}) {
  return requestClient.get<AftersalesProblemApi.Problem[]>(
    '/aftersales/problem/reference',
    { params },
  );
}
