/**
 * 角色相关 API - 匹配后端实际接口
 */

import { BaseService } from '../BaseService'
import request from '@/utils/http'
import type {
  PlatformRole,
  RoleQueryParams,
  PlatformRoleFormData,
  UpdateRoleDefaultCreditRequest,
  BaseResponse,
  PaginationResponse
} from '@/types/api'

export class RoleService extends BaseService {
  /**
   * 获取角色分页列表
   * GET /api/admin/roles
   * @param params 查询参数
   */
  static getRoles(params?: RoleQueryParams): Promise<PaginationResponse<PlatformRole>> {
    return this.getPage<PlatformRole>('/api/admin/roles', params)
  }

  /**
   * 获取角色详情
   * GET /api/admin/roles/{id}
   * @param id 角色ID
   */
  static getRole(id: number): Promise<BaseResponse<PlatformRole>> {
    return this.getOne<PlatformRole>(`/api/admin/roles/${id}`)
  }

  /**
   * 创建角色
   * POST /api/admin/roles
   * @param data 角色数据
   */
  static createRole(data: PlatformRoleFormData): Promise<BaseResponse> {
    return this.create('/api/admin/roles', data)
  }

  /**
   * 更新角色
   * PUT /api/admin/roles/{id}
   * @param id 角色ID
   * @param data 角色数据
   */
  static updateRole(id: number, data: PlatformRoleFormData): Promise<BaseResponse> {
    return this.update(`/api/admin/roles/${id}`, data)
  }

  /**
   * 更新客户角色默认信用
   * PUT /api/admin/roles/{id}/default-credit
   * @param id 角色ID
   * @param data 默认信用配置
   */
  static updateRoleDefaultCredit(
    id: number,
    data: UpdateRoleDefaultCreditRequest
  ): Promise<BaseResponse> {
    return this.put<BaseResponse>(`/api/admin/roles/${id}/default-credit`, data)
  }

  /**
   * 删除角色
   * DELETE /api/admin/roles/{id}
   * @param id 角色ID
   */
  static deleteRole(id: number): Promise<BaseResponse> {
    return this.remove(`/api/admin/roles/${id}`)
  }

  /**
   * 更新角色状态
   * PUT /api/admin/roles/{id}/status
   * @param roleId 角色ID
   * @param status 状态 (0-禁用, 1-启用)
   */
  static updateRoleStatus(roleId: number, status: 0 | 1): Promise<BaseResponse> {
    return this.put<BaseResponse>(`/api/admin/roles/${roleId}/status`, { status })
  }

  // ========== 权限相关 ==========

  /**
   * 获取角色权限
   * GET /api/admin/roles/{id}/permissions
   * @param roleId 角色ID
   */
  static getRolePermissions(roleId: number): Promise<any> {
    return this.get<any>(`/api/admin/roles/${roleId}/permissions`)
  }

  /**
   * 分配权限给角色
   * POST /api/admin/roles/{id}/permissions
   * @param roleId 角色ID
   * @param permissionIds 权限ID列表
   */
  static assignPermissions(roleId: number, permissionIds: number[]): Promise<BaseResponse> {
    return this.post<BaseResponse>(`/api/admin/roles/${roleId}/permissions`, {
      perm_ids: permissionIds
    })
  }

  /**
   * 移除角色的权限（支持批量）
   * DELETE /api/admin/roles/{role_id}/permissions
   * @param roleId 角色ID
   * @param permIds 权限ID列表
   */
  static removePermissions(roleId: number, permIds: number[]): Promise<BaseResponse> {
    // 直接使用 request.del，传递 data 到 Body
    return request.del<BaseResponse>({
      url: `/api/admin/roles/${roleId}/permissions`,
      data: { perm_ids: permIds }
    })
  }
}
