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

const prefix = 'doctor-reception/';

/**
 * 医生应用特色方到开方区
 */
export async function applySpecialPrescriptionApi(data: { register_id: number }) {
  return requestClient.post<any>('special-prescription/apply', data);
}

/**
 * 分页查询用户列表
 * @param data
 */
export async function getPatientList(data: any) {
  return requestClient.get<any>(`${prefix}patient-list`, { params: data });
}

/**
 * 获取患者详情
 * @param id
 */
export async function getPatientItem(id: number) {
  return requestClient.get<any>(`${prefix}patient-item`, { params: { id } });
}

/**
 * 获取商品列表
 * @param data
 */
export async function getProductListDoctorReception(data: any) {
  return requestClient.get<any>(`${prefix}product-list`, { params: data });
}

/**
 * 获取中药规格
 * @param data
 */
export async function getProcessRuleList(data: any) {
  return requestClient.get<any>(`${prefix}process-rule-list`, { params: data });
}

/**
 * 获取药品使用方式列表
 */
export async function getDrugUseList() {
  return requestClient.get<any>(`${prefix}drug-use-list`, {});
}

/**
 * 煎煮方式列表
 */
export async function getUseWayList() {
  return requestClient.get<any>(`${prefix}drug-use-way-list`, {});
}

/**
 * 获取疾病列表
 */
export async function getDiseaseList(name: string) {
  return requestClient.get<any>(`${prefix}disease-list`, {
    params: {
      name,
    },
  });
}

/**
 * 获取疾病列表
 */
export async function getDoctorOrderList() {
  return requestClient.get<any>(`${prefix}doctor-order-list`);
}

/**
 * 获取我的诊所列表
 */
export async function getMyStoreListApi() {
  return requestClient.get<any>(`${prefix}get-my-store-list`);
}

/**
 * 获取当前诊所类型和委托诊所信息
 */
export async function getCurrentStoreTypeApi(params?: {
  register_id?: number;
  store_id?: number;
}) {
  return requestClient.get<any>(`${prefix}get-current-store-type`, {
    params,
  });
}

/**
 * 接诊
 */
export async function receptionApi(id: any) {
  return requestClient.post<any>(`${prefix}reception`, { id });
}

/**
 * 医生撤回处方（仅待支付订单）
 */
export async function withdrawPrescriptionApi(data: {
  prescription_id: number;
  register_id: number;
  reason?: string;
}) {
  return requestClient.post<any>(`${prefix}withdraw-prescription`, data);
}

/**
 * 接诊
 */
export async function endOfDiagnosisApi(id: any) {
  return requestClient.post<any>(`${prefix}end-of-diagnosis`, { id });
}

/**
 * 添加西药药方
 * @param data
 */
export async function addWestPrescription(data: any) {
  return requestClient.post<any>(`${prefix}add-west-prescription`, data);
}

/**
 * 切换诊所
 * @param data
 */
export async function switchStoreApi(data: any) {
  return requestClient.post<any>(`${prefix}switch-store`, data);
}

/**
 * 获取患者详情
 * @param id
 */
export async function getPrescriptionInfoApi(id: number) {
  return requestClient.get<any>('prescription/detail', { params: { id } });
}

/**
 * 获取拒接接诊列表
 */
export async function refuseReceptionListApi() {
  return requestClient.get<any>(`${prefix}refuse-reception-list`);
}
/**
 * 拒诊
 * @param data
 */
export async function refuseReceptionApi(data: any) {
  return requestClient.post<any>(`${prefix}refuse-reception`, data);
}

/**
 * 检查是否有药物相冲
 * @param data
 */
export async function checkChineseMedicineConflictApi(data: any) {
  return requestClient.post<any>(
    `${prefix}check-chinese-medicine-conflict`,
    data,
  );
}

/**
 * 获取监管平台所需的数据
 */
export async function getTraditionalChineseMedicineAllApi() {
  return requestClient.get<any>(
    `${prefix}get-traditional-chinese-medicine-all`,
  );
}

// ==================== 常用方管理 API ====================

const commonPrescriptionPrefix = 'common-prescription/';

/**
 * 常用方列表响应数据结构
 * @description 包含西药、中药、颗粒药三种类型的常用方
 */
export interface CommonPrescriptionData {
  /** 西药常用方列表 */
  west_prescription: any[];
  /** 西药详细药品信息 */
  west: any[][];
  /** 中药常用方列表 */
  chin_prescription: any[];
  /** 中药详细药品信息 */
  chinese: any[][];
  /** 颗粒药常用方列表 */
  granular_prescription: any[];
  /** 颗粒药详细药品信息 */
  granular: any[][];
}

/**
 * 获取常用方列表
 * @description 获取当前医生的所有常用方（西药/中药/颗粒药）
 * @param storeId 诊所ID（可选）
 */
export async function getCommonPrescriptionListApi(storeId?: number) {
  return requestClient.get<CommonPrescriptionData>(
    `${commonPrescriptionPrefix}list`,
    { params: { store_id: storeId } },
  );
}

/**
 * 获取常用方详情
 * @description 根据ID和类型获取常用方的详细信息
 * @param id 常用方ID
 * @param type 类型：west-西药，chinese-中药，granular-颗粒药
 */
export async function getCommonPrescriptionDetailApi(
  id: number,
  type: string,
) {
  return requestClient.get<any[]>(`${commonPrescriptionPrefix}detail`, {
    params: { id, type },
  });
}

/**
 * 常用方药品数据结构（西药/中成药）
 * @description 西药药品的详细信息
 */
export interface CommonPrescriptionWestDrug {
  /** 药品ID */
  drug_id?: number;
  /** 药品ID（兼容字段） */
  id?: number;
  /** 药品名称 */
  drug_name: string;
  /** 每次用量 */
  number?: number;
  /** 购买数量 */
  select_number?: number;
  /** 单价 */
  price?: number;
  /** 使用时间ID */
  time_id?: number;
  /** 使用类型ID */
  type_id?: number;
  /** 使用频率ID */
  frequency_id?: number;
  /** 单位ID */
  unit_id?: number;
  /** 药品图片 */
  image?: string;
  /** 说明书 */
  instruction?: string;
  /** 使用时间信息 */
  use_num?: { name?: string };
  /** 使用类型信息 */
  use_type?: { name?: string };
  /** 使用频率信息 */
  use_frequency?: { name?: string };
  /** 单位信息 */
  unit?: { name?: string };
}

/**
 * 常用方药品数据结构（中药/颗粒药）
 * @description 中药/颗粒药药品的详细信息
 */
export interface CommonPrescriptionChineseDrug {
  /** 药品ID */
  drug_id?: number;
  /** 药品ID（兼容字段） */
  id?: number;
  /** 药品名称 */
  drug_name: string;
  /** 克数/用量 */
  number?: number;
  /** 单价 */
  price?: number;
  /** 用法ID */
  way_id?: number;
}

/**
 * 保存西药常用方
 * @description 将当前处方保存为西药常用方模板，后端会自动创建 recipe 记录
 */
export async function saveWestCommonPrescriptionApi(data: {
  /** 常用方名称 */
  name: string;
  /** 药品详细信息数组 */
  drugs: CommonPrescriptionWestDrug[];
  /** 诊所ID */
  store_id: number;
  /** 临床诊断（可选） */
  clinical_diagnose?: string;
  /** 医嘱（可选） */
  doctor_order?: string;
  /** 类别 1-自费 2-医保（可选） */
  category?: string;
}) {
  return requestClient.post<any>(`${commonPrescriptionPrefix}save-west`, data);
}

/**
 * 保存中药常用方
 * @description 将当前处方保存为中药常用方模板，后端会自动创建 recipe 记录
 */
export async function saveChineseCommonPrescriptionApi(data: {
  /** 常用方名称 */
  name: string;
  /** 药品详细信息数组 */
  drugs: CommonPrescriptionChineseDrug[];
  /** 诊所ID */
  store_id: number;
  /** 临床诊断（可选） */
  clinical_diagnose?: string;
  /** 医嘱（可选） */
  doctor_order?: string;
  /** 类别 1-自费 2-医保（可选） */
  category?: string;
  /** 剂量/天数（可选，默认7） */
  dosage?: number;
  /** 每日次数（可选，默认2） */
  day_dosage?: number;
  /** 1=自制剂 2=委托调剂（与后端 saveChinese 一致） */
  rule_type?: number;
  /** 包法ID（自制剂时） */
  package_method_id?: number;
  /** 制剂规则ID（委托调剂时） */
  process_rule_id?: number;
  /** 煎法子规则ID（委托调剂时） */
  child_process_rule_id?: number;
  /** 规格/备注规则ID（委托调剂时） */
  process_rule_note_id?: number;
}) {
  return requestClient.post<any>(
    `${commonPrescriptionPrefix}save-chinese`,
    data,
  );
}

/**
 * 保存颗粒药常用方
 * @description 将当前处方保存为颗粒药常用方模板，后端会自动创建 recipe 记录
 */
export async function saveGranularCommonPrescriptionApi(data: {
  /** 常用方名称 */
  name: string;
  /** 药品详细信息数组 */
  drugs: CommonPrescriptionChineseDrug[];
  /** 诊所ID */
  store_id: number;
  /** 临床诊断（可选） */
  clinical_diagnose?: string;
  /** 医嘱（可选） */
  doctor_order?: string;
  /** 类别 1-自费 2-医保（可选） */
  category?: string;
  /** 剂量/天数（可选，默认7） */
  dosage?: number;
  /** 每日次数（可选，默认2） */
  day_dosage?: number;
}) {
  return requestClient.post<any>(
    `${commonPrescriptionPrefix}save-granular`,
    data,
  );
}
