/**
 * 患者管理相关API
 *
 * @description 患者管理模块的所有接口定义
 *              - 患者列表查询（到店/线上）
 *              - 患者详情查看
 *              - 挂号记录和处方记录查询
 *              - 患者备注管理
 *              - 群发消息功能
 * @author 系统
 * @date 2024
 */
import { requestClient } from '#/api/request';

const prefix = 'patient-management/';

// ==================== 类型定义 ====================

/**
 * 患者列表项
 */
export interface PatientItem {
  /** 患者ID */
  id: number;
  /** 就诊人ID */
  patient_id: number;
  /** 患者姓名 */
  patient: string;
  /** 头像URL */
  avatar: string;
  /** 年龄 */
  age: number;
  /** 性别：1-男，2-女 */
  sex: number;
  /** 手机号 */
  mobile: string;
  /** 最近接诊时间 */
  recent_accept: string;
}

/**
 * 分页响应数据结构
 */
export interface PageResponse<T> {
  /** 当前页 */
  page: number;
  /** 每页数量 */
  size: number;
  /** 总页数 */
  page_count: number;
  /** 总数量 */
  total: number;
  /** 数据列表 */
  items: T[];
}

/**
 * 患者详情
 */
export interface PatientDetail {
  /** 患者基本信息 */
  patient: {
    id: number;
    user_id: number;
    name: string;
    sex: number;
    id_card: string;
    mobile: string;
  };
  /** 头像 */
  avatar: string;
  /** 年龄 */
  age: number;
  /** 备注 */
  remark: string;
  /** 分组 */
  group: { id: number; name: string }[] | string;
}

/**
 * 挂号记录项
 */
export interface RegisterItem {
  /** 挂号ID */
  id: number;
  /** 订单编号 */
  order_no: string;
  /** 挂号序号 */
  order_number: string;
  /** 挂号费用 */
  price: number;
  /** 是否支付 */
  is_pay: number;
  /** 状态 */
  status: number;
  /** 状态文字 */
  status_text: string;
  /** 状态类型 */
  status_type: string;
  /** 医生 */
  doctor: string;
  /** 诊所 */
  store: string;
  /** 创建时间 */
  created_at: string;
  /** 支付时间 */
  pay_time: string;
}

/**
 * 处方记录项
 */
export interface PrescriptionItem {
  /** 处方ID */
  id: number;
  /** 处方编号 */
  prescription_no: string;
  /** 处方类型 */
  prescription_type: number;
  /** 类型 */
  type: number;
  /** 状态 */
  status: number;
  /** 是否支付 1已支付 0未支付 */
  is_pay: number;
  /** 临床诊断 */
  clinical_diagnose: string;
  /** 患者信息 */
  patient: {
    id: number;
    name: string;
    sex: number;
    age: number;
  };
  /** 创建时间 */
  created_at: string;
}

// ==================== API 函数 ====================

/**
 * 获取患者列表
 * @description 获取当前医生名下的患者列表
 * @param params 查询参数
 *        - status: 1-到店接诊，2-线上接诊（可选）
 *        - name: 患者姓名搜索（可选）
 *        - sex: 性别筛选（可选）
 *        - pageSize: 每页数量（可选）
 */
export async function getPatientListApi(params?: {
  status?: number;
  name?: string;
  sex?: number;
  pageSize?: number;
}) {
  return requestClient.get<PageResponse<PatientItem>>(`${prefix}list`, {
    params,
  });
}

/**
 * 获取医生名下所有患者列表
 * @description 获取当前医生名下的所有患者（不区分到店/线上）
 * @param keyword 搜索关键字（可选）
 */
export async function getPatientListsApi(keyword?: string) {
  return requestClient.get<PageResponse<PatientItem>>(`${prefix}patient-lists`, {
    params: { keyword },
  });
}

/**
 * 获取患者详情
 * @description 获取患者的详细信息，包括基本信息、备注、分组
 * @param upId 就诊人ID
 */
export async function getPatientDetailApi(upId: number) {
  return requestClient.get<PatientDetail>(`${prefix}detail`, {
    params: { up_id: upId },
  });
}

/**
 * 获取患者挂号记录列表
 * @description 获取指定患者的挂号记录
 * @param upId 就诊人ID
 * @param pageSize 每页数量（可选）
 */
export async function getPatientRegisterListApi(
  upId: number,
  pageSize?: number,
) {
  return requestClient.get<PageResponse<RegisterItem>>(
    `${prefix}register-list`,
    {
      params: { up_id: upId, pageSize },
    },
  );
}

/**
 * 获取患者处方记录列表
 * @description 获取指定患者的处方记录
 * @param upId 就诊人ID
 * @param pageSize 每页数量（可选）
 */
export async function getPatientPrescriptionListApi(
  upId: number,
  pageSize?: number,
) {
  return requestClient.get<PageResponse<PrescriptionItem>>(
    `${prefix}prescription-list`,
    {
      params: { up_id: upId, pageSize },
    },
  );
}

/**
 * 添加患者备注
 * @description 为指定患者添加备注
 * @param upId 就诊人ID
 * @param remark 备注内容
 */
export async function savePatientRemarkApi(upId: number, remark: string) {
  return requestClient.post<any>(`${prefix}save-remark`, {
    up_id: upId,
    remark,
  });
}

/**
 * 更新患者备注
 * @description 更新指定患者的备注内容
 * @param upId 就诊人ID
 * @param remark 备注内容
 */
export async function updatePatientRemarkApi(upId: number, remark: string) {
  return requestClient.post<any>(`${prefix}update-remark`, {
    up_id: upId,
    remark,
  });
}

/**
 * 群发消息给患者
 * @description 向多个患者发送消息
 * @param content 消息内容
 * @param upIds 患者ID列表（逗号分隔）
 * @param sendAt 发送时间（可选，留空则立即发送）
 */
export async function sendMessageApi(
  content: string,
  upIds: string,
  sendAt?: string,
) {
  return requestClient.post<any>(`${prefix}send-message`, {
    content,
    up_ids: upIds,
    send_at: sendAt,
  });
}

/**
 * 获取患者基础健康信息
 * @description 获取患者填写的基础健康问卷信息
 * @param upId 就诊人ID
 */
export async function getPatientBaseInfoApi(upId: number) {
  return requestClient.get<any>(`${prefix}base-info`, {
    params: { up_id: upId },
  });
}

