import request from '@/utils/http'

/**
 * 获取角色模板列表
 * @param params 查询参数
 */
export function fetchGetRoleTemplates(params?: any) {
  return request.get<Api.RoleTemplate.RoleTemplateDto[]>({
    url: '/api/admin/v1/role-templates',
    params
  })
}

/**
 * 获取角色模板详情
 * @param templateCode 模板编码
 */
export function fetchGetRoleTemplateDetail(templateCode: string) {
  return request.get<Api.RoleTemplate.RoleTemplateDto>({
    url: `/api/admin/v1/role-templates/${templateCode}`
  })
}

/**
 * 创建角色模板
 * @param data 创建参数
 */
export function fetchCreateRoleTemplate(data: Api.RoleTemplate.CreateRoleTemplateCommand) {
  return request.post<Api.RoleTemplate.RoleTemplateDto>({
    url: '/api/admin/v1/role-templates',
    data
  })
}

/**
 * 更新角色模板
 * @param templateCode 模板编码
 * @param data 更新参数
 */
export function fetchUpdateRoleTemplate(
  templateCode: string,
  data: Api.RoleTemplate.UpdateRoleTemplateCommand
) {
  return request.put<Api.RoleTemplate.RoleTemplateDto>({
    url: `/api/admin/v1/role-templates/${templateCode}`,
    data
  })
}

/**
 * 删除角色模板
 * @param templateCode 模板编码
 */
export function fetchDeleteRoleTemplate(templateCode: string) {
  return request.del<boolean>({
    url: `/api/admin/v1/role-templates/${templateCode}`
  })
}

/**
 * 克隆角色模板
 * @param templateCode 源模板编码
 * @param data 克隆参数
 */
export function fetchCloneRoleTemplate(
  templateCode: string,
  data: Api.RoleTemplate.CloneRoleTemplateCommand
) {
  return request.post<Api.RoleTemplate.RoleTemplateDto>({
    url: `/api/admin/v1/role-templates/${templateCode}/clone`,
    data
  })
}

/**
 * 初始化角色模板
 * @param templateCodes 模板编码列表
 */
export function fetchInitRoleTemplates(templateCodes: string[]) {
  return request.post<any>({
    url: '/api/admin/v1/role-templates/init',
    data: { templateCodes }
  })
}

/**
 * 获取角色模板权限列表
 * @param templateCode 模板编码
 */
export function fetchGetRoleTemplatePermissions(templateCode: string) {
  return request.get<Api.RoleTemplate.PermissionTemplateDto[]>({
    url: `/api/admin/v1/role-templates/${templateCode}/permissions`
  })
}
