/**
 * @description 角色相关API
 * @author yslg
 * @since 2025-10-09
 */

import { api } from '@/apis/index';
import type { SysPermission, SysRole, SysRolePermission, ResultDomain } from '@/types';

/**
 * 角色API服务
 */
export const roleApi = {
  /**
   * @description    获取所有角色
   * @returns Promise<ResultDomain<SysRole>> 角色列表
   * @author    yslg
   * @ since 2025-10-09
   */
  async getAllRoles(): Promise<ResultDomain<SysRole>> {
    const response = await api.post<SysRole>('/roles/all');
    return response.data;
  },

  /**
   * @description    根据角色ID获取角色
   * @param    role 角色信息
   * @returns Promise<ResultDomain<SysRole>> 角色信息
   * @author    yslg
   * @ since 2025-10-09
   */
  async getRoleById(role: SysRole): Promise<ResultDomain<SysRole>> {
    const response = await api.post<SysRole>('/roles/id', role);
    return response.data;
  },

  /**
   * @description    根据过滤条件获取角色列表
   * @param    filter 过滤条件
   * @returns Promise<ResultDomain<SysRole>> 角色列表
   * @author    yslg
   * @ since 2025-10-09
   */
  async getRoleList(filter: SysRole): Promise<ResultDomain<SysRole>> {
    const response = await api.post<SysRole>('/roles/list', filter);
    return response.data;
  },

  /**
   * @description    创建角色
   * @param    role 角色信息
   * @returns Promise<ResultDomain<SysRole>> 角色信息
   * @author    yslg
   * @ since 2025-10-09
   */
  async createRole(role: SysRole): Promise<ResultDomain<SysRole>> {
    const response = await api.post<SysRole>('/roles/role', role);
    return response.data;
  },

  /**
   * @description    更新角色
   * @param    role 角色信息
   * @returns Promise<ResultDomain<SysRole>> 角色信息
   * @author    yslg
   * @ since 2025-10-09
   */
  async updateRole(role: SysRole): Promise<ResultDomain<SysRole>> {
    const response = await api.put<SysRole>('/roles/role', role);
    return response.data;
  },

  /**
   * @description    删除角色
   * @param    role 角色信息
   * @returns Promise<ResultDomain<SysRole>> 角色信息
   * @author    yslg
   * @ since 2025-10-09
   */
  async deleteRole(role: SysRole): Promise<ResultDomain<SysRole>> {
    const response = await api.delete<SysRole>('/roles/role', role);
    return response.data;
  },

  /**
   * @description    获取角色绑定权限列表
   * @param    role 角色信息
   * @returns Promise<ResultDomain<SysPermission>> 角色信息
   * @author    yslg
   * @ since 2025-10-09
   */
  async getRolePermission(role: SysRole): Promise<ResultDomain<SysPermission>> {
    const response = await api.post<SysPermission>('/roles/permission', role);
    return response.data;
  }
};