import type { WidgetGrant } from './auth'

/** 角色归属域：Platform（管理端）/ RCSMonitor（运营端）/ *（通用，对两域生效）。 */
export type RbacScope = 'Platform' | 'RCSMonitor' | '*'

/** 角色：一组「页面 + 操作码 + 控件可见性」授权。 */
export interface RbacRole {
  id: string
  name: string
  description: string
  scope: RbacScope
  /** 可访问页面 Key；含 '*' 表示该 scope 全部页面。 */
  pages: string[]
  /** 操作码；含 '*' 表示全部操作。 */
  ops: string[]
  widgetGrants: WidgetGrant[]
  /** 内置系统角色，前端禁止删除。 */
  system: boolean
}

/** 用户视图（不含密码）。scopes 为该用户可登录的 scope 集合。 */
export interface RbacUserView {
  id: string
  username: string
  displayName: string
  enabled: boolean
  roleIds: string[]
  scopes: string[]
}

/** 权限页面定义（catalog 项）。 */
export interface PageDef {
  key: string
  label: string
  group: string
  scope: string
}

export interface OpDef {
  code: string
  label: string
}

export interface WidgetDef {
  id: string
  label: string
}

export interface ScopeOption {
  value: RbacScope
  label: string
}

/** 权限「字典」：页面 + 操作 + 控件 + scope 选项，供角色编辑器渲染勾选项。 */
export interface RbacCatalog {
  pages: PageDef[]
  ops: OpDef[]
  widgets: WidgetDef[]
  scopes: ScopeOption[]
}

export interface SaveRolePayload {
  id?: string
  name: string
  description?: string
  scope: RbacScope
  pages: string[]
  ops: string[]
  widgetGrants: WidgetGrant[]
}

export interface CreateUserPayload {
  username: string
  displayName?: string
  password: string
  roleIds: string[]
  enabled: boolean
}

export interface UpdateUserPayload {
  displayName?: string
  roleIds?: string[]
  enabled?: boolean
}
