import httpClient from '@/utils/http';

import {
  ControllerResponse,
  ModelAssignSysRoleRequest,
  ModelChangePasswordRequest,
  ModelCreateSysUserRequest,
  ModelResetPasswordRequest,
  ModelSchool,
  ModelSysMenu,
  ModelSysRole,
  ModelSysUser,
  ModelSysUserListResponse,
  ModelUpdateSysUserRequest
} from './data-contracts';
export default {
  /**
   * @description 创建新的系统用户（包含手机号）
   */
  usersCreate: (user: ModelCreateSysUserRequest) => {
    return httpClient.post<
      ControllerResponse & {
        /** 系统用户信息模型 */
        data?: ModelSysUser;
      }
    >(`/sys/users`, { params: user });
  },
  /**
   * @description 获取系统用户列表，支持多种筛选条件包括用户名、手机号、昵称、管理员状态、启用状态、创建人、角色、学校等
   */
  usersList: (query: {
    /**
     * 页码
     * @default 1
     */
    page?: number;
    /**
     * 每页数量
     * @default 10
     */
    page_size?: number;
    /** 用户名（模糊查询） */
    username?: string;
    /** 手机号（模糊查询） */
    phone?: string;
    /** 昵称（模糊查询） */
    nickname?: string;
    /** 是否是管理员：0-否，1-是 */
    is_admin?: number;
    /** 是否启用：0-禁用，1-启用 */
    is_enable?: number;
    /** 创建人（模糊查询） */
    created_by?: string;
    /** 角色ID筛选 */
    role_id?: string;
    /** 学校ID筛选 */
    school_id?: number;
  }) => {
    return httpClient.get<
      ControllerResponse & {
        /** 系统用户列表响应结构 */
        data?: ModelSysUserListResponse;
      }
    >(`/sys/users`, { query: query });
  },
  /**
   * @description 根据is_relation是否是1，返回所有角色信息
   */
  usersAvailableRolesList: () => {
    return httpClient.get<
      ControllerResponse & {
        data?: ModelSysRole[];
      }
    >(`/sys/users/available-roles`);
  },
  /**
   * @description 根据school表中的is_union是否是0，只返回是0的这部分
   */
  usersAvailableSchoolsList: () => {
    return httpClient.get<
      ControllerResponse & {
        data?: ModelSchool[];
      }
    >(`/sys/users/available-schools`);
  },
  /**
   * @description 根据当前登录用户的学校权限，获取其有权查看的用户列表
   */
  usersGetUsersByschoolsList: (query: {
    /** 页码 */
    page?: number;
    /**
     * 每页数量
     * @default 10000
     */
    page_size?: number;
  }) => {
    return httpClient.get<
      ControllerResponse & {
        /** 系统用户列表响应结构 */
        data?: ModelSysUserListResponse;
      }
    >(`/sys/users/getUsersByschools`, { query: query });
  },
  /**
   * @description 通过用户名、手机号、验证码重置用户密码
   */
  usersResetPasswordCreate: (req: ModelResetPasswordRequest) => {
    return httpClient.post<
      ControllerResponse & {
        data?: string;
      }
    >(`/sys/users/reset-password`, { params: req });
  },
  /**
   * @description 根据调用者的身份（系统管理员、联考管理员、学校管理员）获取对应学校范围内的所有学校管理员列表
   */
  usersSchoolAdminsList: (query: {
    /**
     * 页码
     * @default 1
     */
    page?: number;
    /**
     * 每页数量
     * @default 10
     */
    page_size?: number;
  }) => {
    return httpClient.get<
      ControllerResponse & {
        data?: {
          list?: ModelSysUser[];
          page?: number;
          page_size?: number;
          total?: number;
        };
      }
    >(`/sys/users/school-admins`, { query: query });
  },
  /**
   * @description 根据用户ID获取特定系统用户的详细信息
   */
  usersDetail: (uid: string) => {
    return httpClient.get<
      ControllerResponse & {
        /** 系统用户信息模型 */
        data?: ModelSysUser;
      }
    >(`/sys/users/${uid}`);
  },
  /**
   * @description 根据ID更新系统用户信息
   */
  usersUpdate: (uid: string, user: ModelUpdateSysUserRequest) => {
    return httpClient.put<
      ControllerResponse & {
        /** 系统用户信息模型 */
        data?: ModelSysUser;
      }
    >(`/sys/users/${uid}`, { params: user });
  },
  /**
   * @description 根据ID删除系统用户（软删除）
   */
  usersDelete: (uid: string) => {
    return httpClient.delete<
      ControllerResponse & {
        message?: string;
      }
    >(`/sys/users/${uid}`);
  },
  /**
   * @description 管理员直接修改用户密码，无需旧密码和确认密码
   */
  usersPasswordUpdate: (uid: string, req: ModelChangePasswordRequest) => {
    return httpClient.put<ControllerResponse>(`/sys/users/${uid}/password`, { params: req });
  },
  /**
   * @description 获取系统用户的权限列表
   */
  usersPermissionsDetail: (uid: string) => {
    return httpClient.get<
      ControllerResponse & {
        data?: ModelSysMenu[];
      }
    >(`/sys/users/${uid}/permissions`);
  },
  /**
   * @description 检查系统用户是否有特定权限
   */
  usersPermissionsCheckDetail: (
    uid: string,
    query: {
      /** 菜单路由 */
      menu_route: string;
    }
  ) => {
    return httpClient.get<
      ControllerResponse & {
        data?: {
          has_permission?: boolean;
        };
      }
    >(`/sys/users/${uid}/permissions/check`, { query: query });
  },
  /**
   * @description 为系统用户分配角色（自动获取当前操作用户信息）
   */
  usersRolesCreate: (uid: string, req: ModelAssignSysRoleRequest) => {
    return httpClient.post<
      ControllerResponse & {
        data?: string;
      }
    >(`/sys/users/${uid}/roles`, { params: req });
  },
  /**
   * @description 获取系统用户的角色列表
   */
  usersRolesDetail: (uid: string) => {
    return httpClient.get<
      ControllerResponse & {
        data?: ModelSysRole[];
      }
    >(`/sys/users/${uid}/roles`);
  },
  /**
   * @description 移除系统用户的角色
   */
  usersRolesDelete: (
    uid: string,
    query: {
      /** 角色ID列表 */
      role_ids: number[];
    }
  ) => {
    return httpClient.delete<
      ControllerResponse & {
        data?: string;
      }
    >(`/sys/users/${uid}/roles`, { query: query });
  }
};
