/**
 * 数据源领域 - 类型定义
 */

/**
 * 数据源类型枚举
 */
export enum DataSourceType {
  JENKINS_SERVERS = 'JENKINS_SERVERS',
  K8S_CLUSTERS = 'K8S_CLUSTERS',
  GIT_REPOSITORIES = 'GIT_REPOSITORIES',
  DOCKER_REGISTRIES = 'DOCKER_REGISTRIES',
  NOTIFICATION_CHANNEL_TYPES = 'NOTIFICATION_CHANNEL_TYPES',
  NOTIFICATION_CHANNELS = 'NOTIFICATION_CHANNELS',
  USERS = 'USERS',
  ROLES = 'ROLES',
  DEPARTMENTS = 'DEPARTMENTS'
}

/**
 * 级联数据源类型枚举
 */
export enum CascadeDataSourceType {
  ENVIRONMENT_PROJECTS = 'ENVIRONMENT_PROJECTS',           // 环境 → 项目（固定2级）
  JENKINS_SERVER_VIEWS_JOBS = 'JENKINS_SERVER_VIEWS_JOBS', // Jenkins → View → Job（固定3级）
  DEPARTMENT_USERS = 'DEPARTMENT_USERS',                   // 部门 → 用户（固定2级）
  DEPARTMENT_TREE = 'DEPARTMENT_TREE',                     // 部门树（递归无限层级）⭐
  PROJECT_GROUP_APPS = 'PROJECT_GROUP_APPS'                // 项目组 → 应用（固定2级）
}

/**
 * 数据源选项接口
 */
export interface DataSourceOption {
  label: string;
  value: any;
  [key: string]: any;
}

/**
 * 级联选项接口（支持 children）
 */
export interface CascadeOption extends DataSourceOption {
  children?: CascadeOption[];
  isLeaf?: boolean;  // 是否为叶子节点
  loading?: boolean; // 加载状态
}

/**
 * 数据源配置接口
 */
export interface DataSourceConfig {
  url: string;
  params?: Record<string, any>;
  transform: (data: any) => DataSourceOption[];
}

/**
 * 级联层级配置
 */
export interface CascadeLevelConfig {
  url: string;                      // 接口地址
  labelField: string;               // 标签字段
  valueField: string;               // 值字段
  parentParam?: string;             // 父级参数名（如 'environmentId'）
  params?: Record<string, any>;     // 额外参数
  isLeaf?: (item: any) => boolean;  // 判断是否为叶子节点
}

/**
 * 递归级联配置（用于无限层级场景，如组织架构）
 */
export interface RecursiveCascadeConfig {
  url: string;                      // 接口地址
  labelField: string;               // 标签字段
  valueField: string;               // 值字段
  parentParam: string;              // 父级参数名（如 'parentId'）
  params?: Record<string, any>;     // 额外参数
  hasChildren?: (item: any) => boolean;  // 判断是否有子节点（可选，默认根据后端 isLeaf 字段）
}

/**
 * 级联数据源配置接口
 * 支持两种模式：
 * 1. 固定层级模式 - 使用 levels 配置
 * 2. 递归层级模式 - 使用 recursive 配置（无限层级）
 */
export interface CascadeDataSourceConfig {
  levels?: CascadeLevelConfig[];        // 固定层级配置
  recursive?: RecursiveCascadeConfig;   // 递归层级配置（无限层级）
  description?: string;                 // 描述
}

/**
 * 数据源注册表类型
 */
export type DataSourceRegistry = Record<DataSourceType, DataSourceConfig>;

/**
 * 级联数据源注册表类型
 */
export type CascadeDataSourceRegistry = Record<CascadeDataSourceType, CascadeDataSourceConfig>;

