import request from '@/utils/http'

/**
 * 获取租户角色列表
 * @param tenantId 租户ID
 * @param params 查询参数
 */
export function fetchGetTenantRoles(
  tenantId: number | string,
  params?: Api.TenantRole.RoleQueryParams
) {
  return request.get<Api.TenantRole.RoleDtoPagedResult>({
    url: `/api/admin/v1/tenants/${tenantId}/roles`,
    params
  })
}

/**
 * 获取租户角色详情
 * @param tenantId 租户ID
 * @param roleId 角色ID
 */
export function fetchGetTenantRoleDetail(tenantId: number | string, roleId: number | string) {
  return request.get<Api.TenantRole.RoleDto>({
    url: `/api/admin/v1/tenants/${tenantId}/roles/${roleId}`
  })
}

/**
 * 创建租户角色
 * @param tenantId 租户ID
 * @param data 创建参数
 */
export function fetchCreateTenantRole(
  tenantId: number | string,
  data: Api.TenantRole.CreateRoleCommand
) {
  return request.post<Api.TenantRole.RoleDto>({
    url: `/api/admin/v1/tenants/${tenantId}/roles`,
    data
  })
}

/**
 * 更新租户角色
 * @param tenantId 租户ID
 * @param roleId 角色ID
 * @param data 更新参数
 */
export function fetchUpdateTenantRole(
  tenantId: number | string,
  roleId: number | string,
  data: Api.TenantRole.UpdateRoleCommand
) {
  return request.put<Api.TenantRole.RoleDto>({
    url: `/api/admin/v1/tenants/${tenantId}/roles/${roleId}`,
    data
  })
}

/**
 * 删除租户角色
 * @param tenantId 租户ID
 * @param roleId 角色ID
 */
export function fetchDeleteTenantRole(tenantId: number | string, roleId: number | string) {
  return request.del<boolean>({
    url: `/api/admin/v1/tenants/${tenantId}/roles/${roleId}`
  })
}

/**
 * 获取租户角色权限
 * @param tenantId 租户ID
 * @param roleId 角色ID
 */
export function fetchGetTenantRolePermissions(tenantId: number | string, roleId: number | string) {
  return request.get<string[]>({
    url: `/api/admin/v1/tenants/${tenantId}/roles/${roleId}/permissions`
  })
}

/**
 * 更新租户角色权限
 * @param tenantId 租户ID
 * @param roleId 角色ID
 * @param permissions 权限代码列表
 */
export function fetchUpdateTenantRolePermissions(
  tenantId: number | string,
  roleId: number | string,
  permissionIds: string[]
) {
  return request.put<boolean>({
    url: `/api/admin/v1/tenants/${tenantId}/roles/${roleId}/permissions`,
    data: { permissionIds }
  })
}
