import { request } from '@/utils/request'
import { User } from '@/enums/api'
import {
  ModifyUserParams,
  UserListResParams,
  UserGroupResParams,
  UserRoleResParams
} from '@/types/user'

/**
 * 添加用户
 * @param groupId 将新账号添加到哪个域（分组）下
 * @param name 账号名称
 * @param pass 密码，MD5 32位 小写
 * @param email 邮箱号
 * @param mobile 手机号
 * @param status 状态，0=锁定，1=正常
 */
export const addUser = (
  groupId: number,
  name: string,
  pass: string,
  status: number,
  email?: string,
  mobile?: string
) => {
  return request.post<BaseResParams>({
    url: User.SYSTEM_USER_ADD,
    data: {
      user_id: mobile, // 新版本将用户手机号当唯一的user_id
      domain_id: groupId,
      name,
      pass,
      email,
      mobile,
      status
    }
  })
}

/**
 * 修改用户信息
 * @param params ModifyApplicationParams
 */
export const modifyUser = (params: ModifyUserParams) => {
  return request.post<BaseResParams>({
    url: User.SYSTEM_USER_MODIFY,
    data: { ...params }
  })
}

/**
 * 删除用户
 * @param userId 用户id
 */
export const removeUser = (userId: string) => {
  return request.post<BaseResParams>({
    url: User.SYSTEM_USER_REMOVE,
    data: { user_id: userId }
  })
}

/**
 * 获取用户列表
 * @param groupId 域（分组）id
 * @param pageIndex 页码
 * @param pageSize  每页条数
 * @param keyword 搜索关键字，名称或用户id
 */
export const getUserList = (
  groupId: number,
  pageIndex: number,
  pageSize: number,
  keyword?: string
) => {
  return request.post<UserListResParams>({
    url: User.SYSTEM_USER_LIST,
    data: {
      domain_id: groupId,
      page_no: pageIndex,
      page_size: pageSize,
      keyword
    }
  })
}

/**
 * 获取账号所对应的角色。包括已赋予的和可赋予但还没有赋予的
 * @param userId 用户id
 */
export const getUserRoles = (userId: string) => {
  return request.post<UserRoleResParams>({
    url: User.SYSTEM_USER_GET_ROLES,
    data: { user_id: userId }
  })
}

/**
 * 设置用户角色
 * @param userId 用户id
 * @param roles 角色列表。包括新赋予的角色和取消赋予的角色。不在列表中的角色保持不变。
 */
export const setUserRoles = (
  userId: string,
  roles: Array<{ id: string; name?: string; enabled: boolean }>
) => {
  return request.post<BaseResParams>({
    url: User.SYSTEM_USER_SET_ROLES,
    data: { user_id: userId, roles }
  })
}

/**
 * 获取账号所能访问的所有分组的id
 * @param userId 用户id
 */
export const getUserGroupList = (userId: string) => {
  return request.post<UserGroupResParams>({
    url: User.SYSTEM_USER_GET_DOMAINS,
    data: { user_id: userId }
  })
}

/**
 * 设置用户可访问分组
 * @param userId 用户id
 * @param domains 分组列表。包括新赋予的分组和取消赋予的分组。不在列表中的分组保持不变。
 */
export const setUserGroup = (
  userId: string,
  domains: Array<{ id: number; enabled: boolean }>
) => {
  return request.post<BaseResParams>({
    url: User.SYSTEM_USER_SET_DOMAINS,
    data: { user_id: userId, domains }
  })
}
