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

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

export namespace AftersalesTicketApi {
  /** 工单明细行 */
  export interface TicketItem {
    id?: number;
    ticketId?: number;
    saleOrderItemId?: number;
    itemId?: number;
    itemCode?: string;
    itemName?: string;
    batchId?: number;
    batchCode?: string;
    saleQuantity?: number;
    returnQuantity?: number;
    needRepair?: boolean;
    needReturn?: boolean;
    remark?: string;
  }

  /** 售后工单 */
  export interface Ticket {
    id?: number;
    no?: string;
    name: string;
    customerId?: number;
    customerName?: string;
    contactId?: number;
    contactName?: string;
    saleOrderId?: number;
    saleOrderNo?: string;
    contractId?: number;
    issueType?: number;
    issueCategory?: string;
    issueDescription?: string;
    severityLevel?: number;
    status?: number;
    ownerUserId?: number;
    ownerUserName?: string;
    handlerUserId?: number;
    handlerUserName?: string;
    processInstanceId?: string;
    returnId?: number;
    repairId?: number;
    resolvedTime?: string;
    closedTime?: string;
    remark?: string;
    creator?: string;
    createTime?: string;
    updater?: string;
    updateTime?: string;
    /** 附件 blobId 列表（保存时传入） */
    blobIds?: number[];
    /** 附件列表（详情时返回） */
    attachmentList?: { id: number; name?: string; url?: string }[];
    items?: TicketItem[];
  }
}

/** 创建售后工单 */
export function createTicket(data: AftersalesTicketApi.Ticket) {
  return requestClient.post<number>('/aftersales/ticket/create', data);
}

/** 更新售后工单 */
export function updateTicket(data: AftersalesTicketApi.Ticket) {
  return requestClient.put<boolean>('/aftersales/ticket/update', data);
}

/** 删除售后工单 */
export function deleteTicket(id: number) {
  return requestClient.delete<boolean>('/aftersales/ticket/delete', {
    params: { id },
  });
}

/** 获取售后工单详情 */
export function getTicket(id: number) {
  return requestClient.get<AftersalesTicketApi.Ticket>(
    `/aftersales/ticket/get?id=${id}`,
  );
}

/** 分页查询售后工单 */
export function getTicketPage(params: PageParam) {
  return requestClient.get<PageResult<AftersalesTicketApi.Ticket>>(
    '/aftersales/ticket/page',
    { params },
  );
}

/** 分配处理人 */
export function assignTicket(id: number, handlerUserId: number) {
  return requestClient.post<boolean>('/aftersales/ticket/assign', null, {
    params: { id, handlerUserId },
  });
}

/** 问题判定 */
export function classifyTicket(params: {
  id: number;
  issueType: number;
  issueCategory?: string;
  severityLevel?: number;
}) {
  return requestClient.post<boolean>('/aftersales/ticket/classify', null, {
    params,
  });
}

/** 完结工单 */
export function resolveTicket(id: number) {
  return requestClient.put<boolean>('/aftersales/ticket/resolve', null, {
    params: { id },
  });
}

/** 关闭工单 */
export function closeTicket(id: number) {
  return requestClient.put<boolean>('/aftersales/ticket/close', null, {
    params: { id },
  });
}

/** 取消工单 */
export function cancelTicket(id: number) {
  return requestClient.put<boolean>('/aftersales/ticket/cancel', null, {
    params: { id },
  });
}
