/**
 * 权限相关类型定义 - 匹配后端 ModelPermission
 */

import { PaginationParams } from './common'

// 权限类型
export enum PermissionType {
  MENU = 1, // 菜单权限
  BUTTON = 2 // 按钮权限
}

// 权限状态
export enum PermissionStatus {
  ENABLED = 1, // 启用
  DISABLED = 0 // 禁用
}

// 权限实体（匹配后端 ModelPermission）
export interface Permission {
  ID: number
  CreatedAt?: string
  UpdatedAt?: string
  DeletedAt?: string | null
  creator?: number // 创建人ID
  updater?: number // 更新人ID
  perm_name: string // 权限名称
  perm_code: string // 权限编码
  perm_type: PermissionType // 权限类型 (1:菜单, 2:按钮)
  parent_id?: number | null // 父级权限ID
  url?: string // URL路径
  platform?: string // 平台标识 (all:全部, web:Web后台, h5:H5端)
  sort?: number // 排序序号
  status: PermissionStatus // 状态 (0:禁用, 1:启用)
  available_for_role_types?: string // 可用的角色类型
  children?: Permission[] // 子权限列表（树形结构）
}

// 权限树节点（匹配后端 DtoPermissionTreeNode）
export interface PermissionTreeNode {
  id: number // 权限ID
  perm_code: string // 权限编码
  perm_name: string // 权限名称
  perm_type: number // 权限类型 (1:菜单, 2:按钮)
  url?: string // 请求路径
  platform?: string // 适用端口 (all:全部, web:Web后台, h5:H5端)
  sort?: number // 排序值
  status?: number // 状态 (0:禁用, 1:启用)
  available_for_role_types?: string // 可用角色类型 (1:平台角色, 2:客户角色)
  children?: PermissionTreeNode[] // 子权限列表
}

// 权限查询参数
export interface PermissionQueryParams extends PaginationParams {
  perm_name?: string // 权限名称模糊查询
  perm_code?: string // 权限编码模糊查询
  perm_type?: number | null // 权限类型 (1:菜单, 2:按钮)
  status?: number | null // 状态 (0:禁用, 1:启用)
  parent_id?: number | null // 父权限ID
  platform?: string // 适用端口 (all:全部, web:Web后台, h5:H5端)
  available_for_role_type?: number | null // 可用角色类型 (1:平台角色, 2:客户角色)
}

// 创建权限参数
export interface CreatePermissionParams {
  perm_name: string // 权限名称
  perm_code: string // 权限编码
  perm_type: number // 权限类型 (1:菜单, 2:按钮)
  parent_id?: number | null // 父权限ID
  url?: string // 请求路径
  platform?: string // 适用端口 (all:全部, web:Web后台, h5:H5端)，默认为 all
  sort?: number // 排序值
}

// 更新权限参数
export interface UpdatePermissionParams extends Partial<CreatePermissionParams> {
  status?: number // 状态 (0:禁用, 1:启用)
}
