import { BaseVO, BaseDTO } from "../base";

export interface PermissionVO extends BaseVO {
    /** 部门ID */
    deptId?: string;
    /** 部门名称 */
    deptName?: string;
    /** 父级部门ID */
    deptParentId?: string;
    /** 部门描述 */
    deptDescription?: string;
    /** 角色ID */
    roleId?: string;
    /** 角色名称 */
    roleName?: string;
    /** 角色描述 */
    roleDescription?: string;
    /** 角色作用域 */
    roleScope?: string;
    /** 所属部门ID */
    roleOwnerDeptId?: string;
    /** 角色状态 */
    roleStatus?: boolean;
    /** 模块ID */
    moduleId?: string;
    /** 模块名称 */
    moduleName?: string;
    /** 模块描述 */
    moduleDescription?: string;
    /** 权限ID */
    permissionId?: string;
    /** 权限名称 */
    permissionName?: string;
    /** 权限代码 */
    permissionCode?: string;
    /** 权限描述 */
    permissionDescription?: string;
    /** 权限状态 */
    permissionStatus?: string;
    /** 视图ID */
    viewId?: string;
    /** 视图名称 */
    viewName?: string;
    /** 父视图ID */
    viewParentId?: string;
    /** URL */
    viewUrl?: string;
    /** 组件 */
    viewComponent?: string;
    /** 图标 */
    viewIcon?: string;
    /** 类型 */
    viewType?: number;
    /** 布局 */
    viewLayout?: string;
    /** 排序 */
    viewOrderNum?: number;
    /** 视图描述 */
    viewDescription?: string;
    /** 用户视图权限列表 */
    permissionIdList?: string[];
}


// TbSysDeptDTO - 系统部门DTO
export interface TbSysDeptDTO extends BaseDTO {
    /** 部门ID */
    deptId?: string;
    /** 部门名称 */
    name?: string;
    /** 父级部门ID */
    parentId?: string;
    /** 部门描述 */
    description?: string;
}

// TbSysDeptRoleDTO - 系统部门角色关系DTO
export interface TbSysDeptRoleDTO extends BaseDTO {
    /** 部门ID */
    deptId?: string;
    /** 角色ID */
    roleId?: string;
}

// TbSysRoleDTO - 系统角色DTO
export interface TbSysRoleDTO extends BaseDTO {
    /** 角色ID */
    roleId?: string;
    /** 角色名称 */
    name?: string;
    /** 角色描述 */
    description?: string;
    /** 角色作用域 global 全局角色, dept 部门角色 */
    scope?: string;
    /** 所属部门ID */
    ownerDeptId?: string;
    /** 角色状态 true 有效, false 无效 */
    status?: boolean;
}

// TbSysModuleDTO - 系统模块DTO
export interface TbSysModuleDTO extends BaseDTO {
    /** 模块ID */
    moduleId?: string;
    /** 模块名称 */
    name?: string;
    /** 模块描述 */
    description?: string;
}

// TbSysViewDTO - 系统视图DTO
export interface TbSysViewDTO extends BaseDTO {
    /** 视图ID */
    viewId?: string;
    /** 视图名称 */
    name?: string;
    /** 父视图ID */
    parentId?: string;
    /** URL */
    url?: string;
    /** 组件 */
    component?: string;
    /** iframe URL */
    iframeUrl?: string;
    /** 图标 */
    icon?: string;
    /** 类型 */
    type?: number;
    /** 视图类型 route\iframe*/
    viewType?: string;
    /** 所属服务 platform\workcase\bidding */
    service?: string;
    /** 布局 */
    layout?: string;
    /** 排序 */
    orderNum?: number;
    /** 描述 */
    description?: string;
    /** 子视图列表（用于构建树形结构） */
    children?: TbSysViewDTO[];
}

// TbSysPermissionDTO - 系统权限DTO
export interface TbSysPermissionDTO extends BaseDTO {
    /** 权限ID */
    permissionId?: string;
    /** 权限名称 */
    name?: string;
    /** 权限代码 */
    code?: string;
    /** 权限描述 */
    description?: string;
    /** 模块ID */
    moduleId?: string;
    /** 状态 */
    status?: string;
}

// TbSysRolePermissionDTO - 系统角色权限关系DTO
export interface TbSysRolePermissionDTO extends BaseDTO {
    /** 角色ID */
    roleId?: string;
    /** 权限ID */
    permissionId?: string;
}

// TbSysViewPermissionDTO - 系统视图权限关系DTO
export interface TbSysViewPermissionDTO extends BaseDTO {
    /** 视图ID */
    viewId?: string;
    /** 权限ID */
    permissionId?: string;
}

// =============== 数据权限 ===============
export interface AclVO extends BaseVO {
    /** 权限ID */
    aclId?: string;
    /** 对象类型：article/file/course/... */
    objectType?: string;
    /** 对象ID */
    objectId?: string;
    /** 主体类型：user/dept/role */
    principalType?: string;
    /** 主体ID */
    principalId?: string;
    /** 当主体为role且限定到某部门时的部门ID（支持某部门的某角色） */
    principalDeptId?: string;
    /** 权限位：1读 2写 4执行 */
    permission?: number;
    /** 允许或显式拒绝 */
    allow?: boolean;
    /** 是否包含子级（对dept/role生效） */
    includeDescendants?: boolean;
    /** 策略ID */
    policyId?: string;
    /** 策略名称 */
    policyName?: string;
    /** 对象类型：article/file/course/.. */
    policyObjectType?: string;
    /** 编辑层级规则：parent_only/parent_or_same_admin/owner_only/none */
    editHierarchyRule?: string;
    /** 可见层级规则 children_all/children_specified/none */
    viewHierarchyRule?: string;
}

// TbSysAclDTO - 系统访问控制列表DTO（创建和更新）
export interface TbSysAclDTO extends BaseDTO {
    /** 权限ID */
    aclId?: string;
    /** 对象类型：article/file/course/... */
    objectType?: string;
    /** 对象ID */
    objectId?: string;
    /** 主体类型：user/dept/role */
    principalType?: string;
    /** 主体ID */
    principalId?: string;
    /** 当主体为role且限定到某部门时的部门ID（支持某部门的某角色） */
    principalDeptId?: string;
    /** 权限位：1读 2写 4执行 */
    permission?: number;
    /** 允许或显式拒绝 */
    allow?: boolean;
    /** 是否包含子级（对dept/role生效） */
    includeDescendants?: boolean;
}

// TbSysAclPolicyDTO - 系统访问控制策略DTO
export interface TbSysAclPolicyDTO extends BaseDTO {
    /** 策略ID */
    policyId?: string;
    /** 策略名称 */
    name?: string;
    /** 对象类型：article/file/course/.. */
    objectType?: string;
    /** 编辑层级规则：parent_only/parent_or_same_admin/owner_only/none */
    editHierarchyRule?: string;
    /** 可见层级规则 children_all/children_specified/none */
    viewHierarchyRule?: string;
    /** 默认权限（无显式ACL时应用） */
    defaultPermission?: number;
    /** 默认是否允许 */
    defaultAllow?: boolean;
    /** 是否默认应用到子级 */
    applyToChildren?: boolean;
}