import { http } from "@/utils/http";
import { UserDTO } from "../system/user";

/**
 * 企业微信用户信息
 */
export interface QyUserStatsDTO {
  /** 剩余借呗 */
  balance?: number;
  /** 已使用借呗 */
  useBalance?: number;
  /** 借呗额度 */
  balanceLimit?: number;
}

export interface QyUserDTO {
  /** 用户ID（导出列：用户ID） */
  id?: number;
  /** 全局唯一ID（导出列：全局唯一ID） */
  openUserid?: string;
  /** 企业用户ID（导出列：企业用户ID） */
  userid?: string;
  openid?: string;
  /** 用户姓名（导出列：用户姓名） */
  name?: string;
  /** 手机号码（导出列：手机号码） */
  mobile?: string;
  /** 所属部门（导出列：所属部门） */
  department?: string;
  /** 部门排序（导出列：部门排序） */
  userOrder?: string;
  /** 职务信息（导出列：职务信息） */
  position?: string;
  /** 性别（1男 2女，导出列：性别） */
  gender?: string;
  /** 邮箱（导出列：邮箱） */
  email?: string;
  /** 企业邮箱（导出列：企业邮箱） */
  bizMail?: string;
  /** 部门负责人（导出列：部门负责人） */
  isLeaderInDept?: string;
  /** 直属上级（导出列：直属上级） */
  directLeader?: string;
  /** 头像地址（导出列：头像地址） */
  avatar?: string;
  /** 座机号码（导出列：座机号码） */
  telephone?: string;
  /** 别名（导出列：别名） */
  alias?: string;
  /** 激活状态（导出列：激活状态） */
  status?: string;
  /** 个人二维码（导出列：个人二维码） */
  qrCode?: string;
  /** 操作人（导出列：操作人） */
  operator?: string;
  /** 有效状态（导出列：有效状态） */
  enableStatus?: string;
  /** 创建时间（导出列：创建时间） */
  createTimeStr?: string;
  /** 企业ID（导出列：企业ID） */
  corpid?: string;
  /** 应用ID（导出列：应用ID） */
  appid?: string;
  /** 剩余借呗 */
  balance?: number;
  /** 已使用借呗 */
  useBalance?: number;
  /** 借呗额度 */
  balanceLimit?: number;
  /** 角色id */
  roleId?: number;
  /** 角色 */
  roleName?: string;
}

export interface QyUserQuery extends BasePageQuery {
  /** 姓名（导出列：姓名） */
  name?: string;
  /** 手机号（导出列：联系方式） */
  mobile?: string;
  corpid?: string;
  mainDepartment?: number;
  roleId?: number;
  sysRoleId?: number;
  balancePage?: number;
}

export interface AddQyUserCommand {
  name?: string;
  mobile?: string;
  department?: string;
  corpid?: string;
  /** 剩余借呗 */
  balance?: number;
  /** 已使用借呗 */
  useBalance?: number;
  /** 借呗额度 */
  balanceLimit?: number;
  roleId?: number;
  sysRoleId?: number;
}

export interface UpdateQyUserCommand extends AddQyUserCommand {
  id: number;
}

/**
 * 获取企业微信用户列表
 * @param params 查询参数
 * @returns 分页用户列表
 */
export const getQyUserListApi = (params: QyUserQuery) => {
  return http.request<ResponseData<PageDTO<QyUserDTO>>>("get", "/qywx/users", {
    params: { ...params, mainDepartment: params.mainDepartment?.toString() }
  });
};

export const addQyUserApi = (data: AddQyUserCommand) => {
  return http.request<ResponseData<void>>("post", "/qywx/users", { data });
};

export const updateQyUserApi = (id: number, data: UpdateQyUserCommand) => {
  return http.request<ResponseData<void>>("put", `/qywx/users/${id}`, { data });
};

export const deleteQyUserApi = (ids: number[]) => {
  return http.request<ResponseData<void>>("delete", `/qywx/users/${ids.join(',')}`);
};

/**
 * 同步企业微信用户数据
 * @param params 同步参数
 * @param params.corpid 企业ID
 * @param params.code 授权code
 */
export const syncQyUserApi = (params: { corpid: string; code: string }) => {
  return http.request<ResponseData<void>>("post", "/qywx/users/sync", {
    params
  });
};

export const exportQyUserExcelApi = (params: QyUserQuery, fileName: string) => {
  return http.download("/qywx/users/excel", fileName, { params });
};

export const getQyUserDetailApi = (id: number) => {
  return http.request<ResponseData<QyUserDTO>>("get", `/qywx/users/detail/${id}`);
};

export const getTotalBalanceApi = (corpid: string) => {
  return http.request<ResponseData<QyUserStatsDTO>>("get", `/qywx/users/getTotalBalance`, {
    params: { corpid }
  });
};