import request from '@/axios'
import type { roleRequestData, addRole } from './types'
import { REQUEST_BASE } from '@/constants'

/**
 * 获取角色列表的API接口
 *
 * 该函数通过发送GET请求到'/roles'端点，来获取系统中的角色列表
 * 不需要任何参数，也不需要用户身份验证
 *
 * @returns {Promise<IResponse>} 返回一个Promise对象，解析为角色列表的数据
 */
export const getRoleListApi = (params: roleRequestData): Promise<IResponse> => {
  return request.get({ url: `${REQUEST_BASE}/roles`, params })
}

/**
 * 添加角色的API请求函数
 *
 * 此函数通过发送POST请求到'/roles'端点，来添加一个新的角色
 * 它要求一个符合`addRole`接口的对象作为参数，该对象包含了需要添加的角色的信息
 * 函数返回一个Promise对象，该对象解析为一个包含服务器响应的`IResponse`对象
 *
 * @param data 角色信息，符合`addRole`接口的要求
 * @returns 返回一个Promise对象，解析为`IResponse`接口的实例
 */
export const addRoleApi = (data: addRole): Promise<IResponse> => {
  return request.post({ url: `${REQUEST_BASE}/roles`, data })
}

/**
 * 获取角色信息的API函数
 *
 * @param data - 包含角色ID的对象，用于指定要获取的角色
 * @returns 返回一个Promise，解析为IResponse类型，包含角色信息的响应数据
 */
export const getRoleApi = (data: { id: string | number }): Promise<IResponse> => {
  // 发起GET请求到指定的角色URL，以获取角色信息
  return request.get({ url: `${REQUEST_BASE}/roles/${data.id}` })
}

/**
 * 更新角色信息的API请求函数
 *
 * @param data 包含角色信息的对象，其中应包括角色ID和其他相关信息
 * @returns 返回一个Promise，解析为IResponse类型，包含响应数据
 *
 * 此函数通过发送PUT请求来更新服务器上的角色信息请求的URL基于提供的角色ID构建
 * 使用PUT方法是因为它适合于更新资源信息
 */
export const setRoleApi = (data: any): Promise<IResponse> => {
  return request.put({ url: `${REQUEST_BASE}/roles/${data.id}`, data })
}

/**
 * 删除角色的API请求函数
 *
 * @param data 包含角色ID的对象，用于指定要删除的角色
 * @returns 返回一个Promise，解析为IResponse类型，包含响应数据
 *
 * 此函数通过发送DELETE请求来删除服务器上的角色
 * 请求的URL基于提供的角色ID构建
 */
export const delRoleApi = (data: { id: string | number }): Promise<IResponse> => {
  return request.delete({ url: `${REQUEST_BASE}/roles/${data.id}` })
}
