import apiClient from '@/lib/api-client';

export interface Permission {
  id: string;
  resource: string;
  action: string;
  description?: string;
  code?: string;
}

export interface Role {
  id: string;
  name: string;
  code: string;
  description?: string;
  isBuiltIn: boolean;
  userCount?: number;
  permissionCount?: number;
  permissions?: Permission[];
  users?: any[];
  createdAt: string;
  updatedAt: string;
}

export interface PermissionGroup {
  resource: string;
  resourceName: string;
  permissions: Permission[];
}

export interface CreateRoleDto {
  name: string;
  code: string;
  description?: string;
}

export interface UpdateRoleDto {
  name?: string;
  description?: string;
}

/**
 * 获取所有角色
 */
export async function getRoles(): Promise<Role[]> {
  return apiClient.get('/roles');
}

/**
 * 获取单个角色详情
 */
export async function getRole(id: string): Promise<Role> {
  return apiClient.get(`/roles/${id}`);
}

/**
 * 创建角色
 */
export async function createRole(data: CreateRoleDto): Promise<Role> {
  return apiClient.post('/roles', data);
}

/**
 * 更新角色
 */
export async function updateRole(id: string, data: UpdateRoleDto): Promise<Role> {
  return apiClient.put(`/roles/${id}`, data);
}

/**
 * 删除角色
 */
export async function deleteRole(id: string): Promise<void> {
  return apiClient.delete(`/roles/${id}`);
}

/**
 * 获取角色的权限列表
 */
export async function getRolePermissions(id: string): Promise<Permission[]> {
  return apiClient.get(`/roles/${id}/permissions`);
}

/**
 * 为角色分配权限
 */
export async function assignPermissionsToRole(
  id: string,
  permissionIds: string[]
): Promise<Role> {
  return apiClient.post(`/roles/${id}/permissions`, { permissionIds });
}

/**
 * 获取角色的用户列表
 */
export async function getRoleUsers(id: string): Promise<any[]> {
  return apiClient.get(`/roles/${id}/users`);
}

/**
 * 获取所有权限
 */
export async function getAllPermissions(): Promise<Permission[]> {
  return apiClient.get('/roles/permissions/all');
}

/**
 * 获取权限分组
 */
export async function getPermissionsGrouped(): Promise<PermissionGroup[]> {
  return apiClient.get('/roles/permissions/grouped');
}

