/**
 * @description 部门相关类型定义
 * @author yslg
 * @since 2025-10-06
 */

import { BaseDTO } from '../base';
import { SysRole } from '../system/role';
import { SysUserDeptRole } from '../system/user';

/**
 * 系统部门
 */
export interface SysDept extends BaseDTO {
  /** 部门ID */
  deptID?: string;
  /** 父部门ID */
  parentID?: string;
  /** 部门路径，格式：/root_department/dept_001/ */
  deptPath?: string;
  /** 部门名称 */
  name?: string;
  /** 部门描述 */
  description?: string;
  /** 创建人 */
  creator?: string;
  /** 更新人 */
  updater?: string;
  /** 子部门列表（前端使用） */
  children?: SysDept[];
}

/**
 * 部门角色VO
 */
export interface UserDeptRoleVO {

  depts?: SysDept[];
  roles?: SysRole[];
  userDeptRoles?: SysUserDeptRole[];
  
  // 扁平化字段，用于权限查询优化
  /** 用户ID */
  userID?: string;
  /** 部门ID */
  deptID?: string;
  /** 部门名称 */
  deptName?: string;
  /** 部门描述 */
  deptDescription?: string;
  /** 父部门ID */
  parentID?: string;
  /** 父部门名称 */
  parentName?: string;
  /** 父部门描述 */
  parentDescription?: string;
  /** 角色ID */
  roleID?: string;
  /** 角色名称 */
  roleName?: string;
  /** 角色描述 */
  roleDescription?: string;
  /** 部门路径，用于快速权限继承判断 */
  deptPath?: string;
}

/**
 * 部门角色关联
 */
export interface SysDeptRole extends BaseDTO {
  id?: string;
  /** 部门ID */
  deptID?: string;
  /** 角色ID */
  roleID?: string;
  
  // 扁平化字段（用于前端展示，从关联查询中获取）
  /** 部门名称 */
  deptName?: string;
  /** 部门描述 */
  deptDescription?: string;
  /** 父部门ID */
  parentID?: string;
  /** 部门路径 */
  deptPath?: string;
  /** 角色名称 */
  roleName?: string;
  /** 角色描述 */
  roleDescription?: string;
}

