import { http } from "@/utils/http";

export type CaptchaDTO = {
  /**  验证码的base64图片 */
  captchaCodeImg: string;
  /** 验证码对应的缓存key */
  captchaCodeKey: string;
};

export type ConfigDTO = {
  /** 验证码开关 */
  isCaptchaOn: boolean;
  /** 系统字典配置（下拉选项之类的） */
  dictionary: Map<String, Array<DictionaryData>>;
  /**
   * 服务器主机地址
   */
  serverHost: string;
};

export type LoginByPasswordDTO = {
  /** 用户名 */
  username?: string;
  /**  密码 */
  password?: string;
  /** 验证码 */
  captchaCode?: string;
  /** 验证码对应的缓存key */
  captchaCodeKey?: string;
  /** 企业微信 */
  corpid: string;
  code: string;
  state: string;
};

/**
 * 后端token实现
 */
export type TokenDTO = {
  /** token */
  token: string;
  /** 当前登录的用户 */
  currentUser: CurrentLoginUserDTO;
  /** 企业微信用户信息 */
  qyUser: QyUserLoginDTO;
};

export type CurrentLoginUserDTO = {
  userInfo: CurrentUserInfoDTO;
  roleKey: string;
  permissions: Set<string>;
};

/**
 * 当前User
 */
export interface CurrentUserInfoDTO {
  avatar?: string;
  createTime?: Date;
  creatorId?: number;
  creatorName?: string;
  deptId?: number;
  deptName?: string;
  email?: string;
  loginDate?: Date;
  loginIp?: string;
  nickname?: string;
  phoneNumber?: string;
  postId?: number;
  postName?: string;
  remark?: string;
  roleId?: number;
  roleName?: string;
  sex?: number;
  status?: number;
  updaterId?: number;
  updaterName?: string;
  updateTime?: Date;
  userId?: number;
  username?: string;
  userType?: number;
}

export type DictionaryData = {
  label: string;
  value: number;
  cssTag: string;
};

/** 获取系统配置接口 */
export const getConfig = () => {
  return http.request<ResponseData<ConfigDTO>>("get", "/getConfig");
};

/** 验证码接口 */
export const getCaptchaCode = () => {
  return http.request<ResponseData<CaptchaDTO>>("get", "/captchaImage");
};

/** 登录接口 */
export const loginByPassword = (data: LoginByPasswordDTO) => {
  return http.request<ResponseData<TokenDTO>>("post", "/login", { data });
};

/** 获取当前登录用户接口 */
export const getLoginUserInfo = () => {
  return http.request<ResponseData<TokenDTO>>("get", "/getLoginUserInfo");
};

type Result = {
  success: boolean;
  data: Array<any>;
};

/** 获取动态菜单 */
export const getAsyncRoutes = () => {
  return http.request<Result>("get", "/getRouters");
};

type qyUserinfoQuery = {
  // 授权企业id
  corpid: string;
  // 企业微信 code
  code: string;
}

/** 获取企业微信访问用户身份接口 */
export const getQyUserinfo = (params: qyUserinfoQuery) => {
  return http.request<ResponseData<string>>("get", "/getQyUserinfo", { params });
};


export interface QyUserLoginDTO {
  /** 用户ID */
  id?: number;
  /** 全局唯一ID */
  openUserid?: string;
  /** 企业用户ID */
  userid?: string;
  /** 汇邦云用户ID */
  ab98UserId?: number;
  /** 用户姓名 */
  name?: string;
  /** 手机号码 */
  mobile?: string;
  /** 所属部门 */
  department?: string;
  /** 部门排序 */
  userOrder?: string;
  /** 职务信息 */
  position?: string;
  /** 性别 */
  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 */
  corpid?: string;
  /** 应用ID */
  appid?: string;
  /** 用户余额 */
  balance?: number;
  /** 已使用用户余额 */
  useBalance?: number;
  /** 用户余额额度 */
  balanceLimit?: number;
  /** 系统角色ID */
  sysRoleId?: number;
  /** 角色ID */
  roleId?: number;
  /** 角色名称 */
  roleName?: string;
}

/** 获取动态菜单 */
export const getPermissions = () => {
  return http.request<ResponseData<string[]>>("get", "/getPermissions");
};