import { http } from "@/utils/http";
import type { FileInfo } from "types/file";

/**
 * 登录结果
 */
export type LoginResponse = {
  /**用户Token */
  token: string;
};

export type UserResult = {
  /**用户ID */
  userId: string;
  /** 用户名 */
  username: string;
  /**用户头像 */
  avatar: string;
  /** 用户角色 */
  roles: string[];
  /** `token` */
  accessToken: string;
  /**用户权限 */
  permissions: string[];
  /** `accessToken`的过期时间戳（毫秒） */
  expires: number;
};

/** 登录 */
export const getLogin = (data?: object) => {
  return http.request<UserResult>("post", "/api/login", {
    // headers: {
    //   "Content-Type": "application/x-www-form-urlencoded"
    // },
    data
  });
};

/**
 * 更新邮箱
 * @param data
 * @returns
 */
export const putUpdateEmailAPI = (data: {
  /**密码 */
  password: string;
  /**邮箱 */
  email: string;
}) => {
  return http.request<null>("put", `/api/user/updateEmail`, {
    headers: {
      "content-type": "application/x-www-form-urlencoded"
    },
    data
  });
};

/**
 * 更新密码
 * @param data
 * @returns
 */
export const putUpdatePasswordAPI = (data: {
  /**旧密码 */
  oldPassword: string;
  /**新密码 */
  newPassword: string;
}) => {
  return http.request<null>("put", `/api/user/updatePassword`, {
    headers: {
      "content-type": "application/x-www-form-urlencoded"
    },
    data
  });
};
/**
 * 更新手机号
 * @param data
 * @returns
 */
export const putUpdatePhoneAPI = (data: {
  /**密码 */
  password: string;
  /**手机号 */
  phone: string;
}) => {
  return http.request<null>("put", `/api/user/updatePhone`, {
    headers: {
      "content-type": "application/x-www-form-urlencoded"
    },
    data
  });
};

/**更新用户基础信息参数 */
type UpdateBaseUserInfoParams = {
  /**姓名 */
  name: string;
  /**性别 */
  gender: number;
};

/**
 * 更新用户基础信息
 * @param data
 * @returns
 */
export const putUpdateBaseUserInfoAPI = (data: UpdateBaseUserInfoParams) => {
  return http.request<null>("PUT", "/api/user/updateBaseUserInfo", { data });
};

/**
 * 更新头像
 * @param id 用户ID
 * @param data 图片数据
 * @returns
 */
export const postUploadAvatarAPI = (id: string, data: { file: Blob }) => {
  return http.request<FileInfo>("post", `/api/user/avatar/${id}`, {
    headers: {
      "content-type": "multipart/form-data"
    },
    data
  });
};

/**用户查询统计结果 */
interface UserQueryStatistics {
  /**今日统计 */
  today_count: number;
  /**当月统计 */
  this_month_count: number;
  /**上月统计 */
  last_month_count: number;
  /**最近14天内成功查询统计 */
  before_14day_count_success: {
    /**日期 */
    date: string;
    /**查询次数 */
    count: number;
  }[];
  /**最近14天内失败查询统计 */
  before_14day_count_fail: {
    /**日期 */
    date: string;
    /**查询次数 */
    count: number;
  }[];
}

/**
 * 获取用户查询统计
 */
export const getUserQueryStatisticsAPI = () => {
  return http.request<UserQueryStatistics>("get", "/api/user/statistics");
};
