/**
 * 表单设计器类型定义
 */

// 字段类型
export type FieldType =
  | 'input'          // 单行文本
  | 'textarea'       // 多行文本
  | 'number'         // 数字输入
  | 'select'         // 下拉选择
  | 'radio'          // 单选按钮组
  | 'checkbox'       // 多选框组
  | 'date'           // 日期选择
  | 'datetime'       // 日期时间选择
  | 'time'           // 时间选择
  | 'switch'         // 开关
  | 'slider'         // 滑块
  | 'rate'           // 评分
  | 'upload'         // 文件上传
  | 'cascader'       // 级联选择
  | 'text'           // 纯文本
  | 'grid'           // 栅格布局
  | 'divider'        // 分割线
  | 'approver-selector'; // 审批人选择器（工作流扩展）

// 选项类型（用于 select, radio, checkbox）
export interface FieldOption {
  label: string;
  value: string | number;
}

// 级联选项类型（用于 cascader，支持 children）
export interface CascadeFieldOption {
  label: string;
  value: string | number;
  children?: CascadeFieldOption[];
  isLeaf?: boolean;
}

// 数据源类型
export type DataSourceType = 'static' | 'api' | 'predefined';

// 验证规则类型
export type ValidationType = 
  | 'required'      // 必填
  | 'pattern'       // 正则表达式
  | 'min'           // 最小值/最小长度
  | 'max'           // 最大值/最大长度
  | 'minLength'     // 最小长度
  | 'maxLength'     // 最大长度
  | 'email'         // 邮箱
  | 'url'           // URL
  | 'phone'         // 手机号
  | 'idCard'        // 身份证
  | 'custom';       // 自定义验证

// 验证规则
export interface ValidationRule {
  type: ValidationType;
  value?: any;                  // 规则值（如正则表达式、最小值等）
  message?: string;             // 错误提示信息
  trigger?: 'blur' | 'change';  // 触发时机
}

// 联动类型
export type LinkageType = 
  | 'visible'   // 显示/隐藏
  | 'disabled'  // 禁用/启用
  | 'required'  // 必填/非必填
  | 'options'   // 选项联动（如省市区）
  | 'value';    // 值联动

// 联动条件
export interface LinkageCondition {
  field: string;              // 关联字段名
  operator: '==' | '!=' | '>' | '<' | '>=' | '<=' | 'includes' | 'notIncludes';
  value: any;                 // 比较值
}

// 联动规则
export interface LinkageRule {
  id: string;
  type: LinkageType;
  conditions: LinkageCondition[];  // 多个条件（且关系）
  action: any;                     // 执行的动作（根据type不同而不同）
}

// API 数据源配置
export interface ApiDataSource {
  url: string;                    // 接口地址
  method?: 'GET' | 'POST';        // 请求方法，默认 GET
  params?: Record<string, any>;   // 请求参数
  dataPath?: string;              // 数据路径（如 'data', 'result.list'），用于从响应中提取数组
  labelField: string;             // 标签字段名（如 'name', 'label', 'text'）
  valueField: string;             // 值字段名（如 'id', 'code', 'value'）
}

// 预定义数据源配置（使用 dataSourceLoader 中定义的数据源）
export interface PredefinedDataSource {
  sourceType: string;             // 数据源类型，对应 DataSourceType 枚举（如 'JENKINS_SERVERS'）
}

// 预定义级联数据源配置
export interface PredefinedCascadeDataSource {
  sourceType: string;             // 级联数据源类型，对应 CascadeDataSourceType 枚举（如 'ENVIRONMENT_PROJECTS'）
}

// 字段配置
export interface FieldConfig {
  id: string;
  type: FieldType;
  label: string;
  name: string;
  placeholder?: string;
  required?: boolean;
  disabled?: boolean;
  defaultValue?: any;
  options?: FieldOption[];              // 静态选项数据（select, radio, checkbox 使用）
  cascadeOptions?: CascadeFieldOption[]; // 静态级联选项数据（cascader 静态模式使用）
  dataSourceType?: DataSourceType;      // 数据源类型：static（静态）、api（接口）或 predefined（预定义）
  apiDataSource?: ApiDataSource;        // API 数据源配置（当 dataSourceType 为 'api' 时使用）
  predefinedDataSource?: PredefinedDataSource;  // 预定义数据源配置（当 dataSourceType 为 'predefined' 时使用）
  predefinedCascadeDataSource?: PredefinedCascadeDataSource;  // 预定义级联数据源配置（cascader 使用）
  validationRules?: ValidationRule[];   // 验证规则列表
  linkageRules?: LinkageRule[];         // 联动规则列表
  min?: number;
  max?: number;
  rows?: number;
  showTime?: boolean;
  multiple?: boolean;
  accept?: string;
  maxCount?: number;
  span?: number; // 栅格占位格数（该字段在栅格中占几列）
  content?: string; // 文本内容（用于 text 组件）
  textAlign?: 'left' | 'center' | 'right'; // 文字对齐方式（用于 text 组件）
  fontSize?: number; // 文字大小（用于 text 组件）
  textColor?: string; // 文字颜色（用于 text 组件）
  checkboxLayout?: 'horizontal' | 'vertical'; // 多选框布局方式（horizontal:行内，vertical:块级）
  columns?: number; // 栅格列数（用于 grid 组件）
  columnSpans?: number[]; // 栅格每列宽度（用于 grid 组件，如 [2, 18, 2]，总和不超过24）
  gutter?: number; // 栅格间距（用于 grid 组件）
  children?: FieldConfig[][]; // 子字段（用于容器组件，二维数组，每个子数组代表一列）
  
  // ========== 审批人选择器专用属性（工作流扩展） ==========
  // 审批配置
  approvalMode?: 'SINGLE' | 'ALL' | 'ANY';  // 审批模式：SINGLE=单人审批，ALL=会签（所有人同意），ANY=或签（任一人同意）
  approverType?: 'USER' | 'ROLE' | 'DEPARTMENT' | 'VARIABLE';  // 审批人类型：USER=指定用户，ROLE=指定角色，DEPARTMENT=指定部门，VARIABLE=变量指定
  // 审批人选择
  approvers?: string[];           // 审批人列表（用户username）- 当 approverType='USER' 时使用
  approverRoles?: string[];       // 审批角色列表（角色code）- 当 approverType='ROLE' 时使用
  approverDepartments?: string[]; // 审批部门列表（部门code）- 当 approverType='DEPARTMENT' 时使用
  approverVariable?: string;      // 审批人变量（如 ${initiator}）- 当 approverType='VARIABLE' 时使用
  // 审批界面
  approvalTitle?: string;         // 审批标题（显示在审批弹窗中）
  approvalContent?: string;       // 审批说明（显示在审批弹窗中）
  // 高级设置
  timeoutDuration?: number;       // 超时时间（小时），0表示不限制
  timeoutAction?: 'NONE' | 'AUTO_APPROVE' | 'AUTO_REJECT' | 'NOTIFY';  // 超时处理：NONE=不处理，AUTO_APPROVE=自动同意，AUTO_REJECT=自动拒绝，NOTIFY=通知管理员
  allowDelegate?: boolean;        // 允许转交
  allowAddSign?: boolean;         // 允许加签
  requireComment?: boolean;       // 必须填写审批意见
}

// 表单配置
export interface FormConfig {
  title?: string;
  formWidth?: number; // 表单弹窗宽度（像素）
  labelAlign?: 'left' | 'right' | 'top';
  size?: 'small' | 'middle' | 'large';
}

// 表单 Schema（标准化数据格式）
export interface FormSchema {
  version: string;  // Schema 版本号
  formConfig: FormConfig;
  fields: FieldConfig[];
  metadata?: {      // 元数据（可选）
    createdAt?: string;
    updatedAt?: string;
    author?: string;
  };
}

