/**
 * 权限管理 API
 *
 * 角色管理、权限码查询、用户权限配置等接口封装
 */

import { api } from '@/api/request';

/** 角色信息 */
export interface Role {
  id: number;
  name: string;
  description?: string;
  permission_codes: string[];
}

/** 权限码信息 */
export interface PermissionItem {
  id: number;
  code: string;
  name: string;
}

/** 用户权限范围条目 */
export interface ScopeEntry {
  id?: number;
  /** 1组织 2项目 3设备 */
  scope_type: number;
  /** 对应的组织/项目/设备ID */
  scope_id: number;
  /** 1查看 2操作 */
  permission_type: number;
}

/** 用户权限详情 */
export interface UserPermissionDetail {
  user_id: number;
  name: string;
  phone: string;
  role_level: number;
  organization_id: number | null;
  roles: Role[];
  permission_codes: string[];
  scopes: ScopeEntry[];
}

// ── 角色管理 ──

/** 获取所有角色列表 */
export async function fetchRoles(): Promise<Role[]> {
  const res = await api.get<Role[]>('/roles');
  return res.data ?? [];
}

/** 创建角色 */
export async function createRole(name: string, description?: string) {
  return api.post('/roles', { name, description });
}

/** 更新角色 */
export async function updateRole(id: number, name: string, description?: string) {
  return api.put(`/roles/${id}`, { name, description });
}

/** 删除角色 */
export async function deleteRole(id: number) {
  return api.delete(`/roles/${id}`);
}

/** 设置角色权限（全量替换） */
export async function setRolePermissions(roleId: number, permissionCodes: string[]) {
  return api.put(`/roles/${roleId}/permissions`, { permission_codes: permissionCodes });
}

// ── 权限码 ──

/** 获取所有权限码列表 */
export async function fetchPermissions(): Promise<PermissionItem[]> {
  const res = await api.get<PermissionItem[]>('/permissions');
  return res.data ?? [];
}

// ── 用户权限 ──

/** 获取用户权限详情 */
export async function fetchUserPermissions(userId: number): Promise<UserPermissionDetail> {
  const res = await api.get<UserPermissionDetail>(`/users/${userId}/permissions`);
  return res.data;
}

/** 设置用户角色（全量替换） */
export async function setUserRoles(userId: number, roleIds: number[]) {
  return api.put(`/users/${userId}/roles`, { role_ids: roleIds });
}

/** 设置用户权限范围（全量替换） */
export async function setUserScopes(userId: number, scopes: ScopeEntry[]) {
  return api.put(`/users/${userId}/scopes`, { scopes });
}

/** 获取用户权限范围 */
export async function fetchUserScopes(userId: number): Promise<ScopeEntry[]> {
  const res = await api.get<ScopeEntry[]>(`/users/${userId}/scopes`);
  return res.data ?? [];
}
