/**
 * 前后端共享的 TypeScript 类型定义。
 * 与设计文档中的 Pydantic 模型和数据库表结构对应。
 */

/** ETL 任务执行配置 */
export interface TaskConfig {
  tasks: string[];
  /** 执行流程 Flow ID（对应 CLI --flow） */
  flow: string;
  /** 处理模式 */
  processing_mode: string;
  /** 传统模式兼容（已弃用） */
  pipeline_flow: string;
  dry_run: boolean;
  /** lookback / custom */
  window_mode: string;
  window_start: string | null;
  window_end: string | null;
  /** none / day */
  window_split: string | null;
  /** 1 / 10 / 30 */
  window_split_days: number | null;
  lookback_hours: number;
  overlap_seconds: number;
  fetch_before_verify: boolean;
  skip_ods_when_fetch_before_verify: boolean;
  ods_use_local_json: boolean;
  /** 门店 ID（由后端从 JWT 注入） */
  store_id: number | null;
  /** DWD 表级选择 */
  dwd_only_tables: string[] | null;
  /** 强制全量处理（跳过 hash 去重和变更对比） */
  force_full: boolean;
  /** Pipeline 调优参数（可选） */
  pipeline_workers: number | null;
  pipeline_batch_size: number | null;
  pipeline_rate_min: number | null;
  pipeline_rate_max: number | null;
  extra_args: Record<string, unknown>;
}

/** 执行流程（Flow）定义 */
export interface FlowDefinition {
  id: string;
  name: string;
  /** 包含的层：ODS / DWD / DWS / INDEX */
  layers: string[];
}

/** 处理模式定义 */
export interface ProcessingModeDefinition {
  id: string;
  name: string;
  description: string;
}

/** 任务注册表中的任务定义 */
export interface TaskDefinition {
  code: string;
  name: string;
  description: string;
  /** 业务域（会员、结算、助教等） */
  domain: string;
  /** 所属层：ODS / DWD / DWS / INDEX / UTILITY */
  layer: string;
  requires_window: boolean;
  is_ods: boolean;
  is_dimension: boolean;
  default_enabled: boolean;
  /** 常用任务标记，false 表示工具类/手动类任务 */
  is_common: boolean;
}

/** DWD 表定义（后端返回的完整结构） */
export interface DwdTableItem {
  table_name: string;
  display_name: string;
  domain: string;
  ods_source: string;
  is_dimension: boolean;
}

/** 调度配置 */
export interface ScheduleConfig {
  schedule_type: "once" | "interval" | "daily" | "weekly" | "cron";
  interval_value: number;
  interval_unit: "minutes" | "hours" | "days";
  daily_time: string;
  weekly_days: number[];
  weekly_time: string;
  cron_expression: string;
  enabled: boolean;
  start_date: string | null;
  end_date: string | null;
}

/** 队列中的任务 */
export interface QueuedTask {
  id: string;
  site_id: number;
  config: TaskConfig;
  status: "pending" | "running" | "success" | "failed" | "cancelled";
  position: number;
  created_at: string;
  started_at: string | null;
  finished_at: string | null;
  exit_code: number | null;
  error_message: string | null;
  schedule_id: string | null;
}

/** 执行历史记录 */
export interface ExecutionLog {
  id: string;
  site_id: number;
  task_codes: string[];
  status: string;
  started_at: string;
  finished_at: string | null;
  exit_code: number | null;
  duration_ms: number | null;
  command: string;
  summary: Record<string, unknown> | null;
  schedule_id: string | null;
}

/** 单个任务的最小执行间隔 */
export interface MinRunIntervalItem {
  value: number;
  unit: "minutes" | "hours" | "days";
}

/** 调度任务 */
export interface ScheduledTask {
  id: string;
  site_id: number;
  name: string;
  task_codes: string[];
  task_config: TaskConfig;
  schedule_config: ScheduleConfig;
  enabled: boolean;
  last_run_at: string | null;
  next_run_at: string | null;
  run_count: number;
  last_status: string | null;
  min_run_interval_value: number;
  min_run_interval_unit: string;
  last_success_at: string | null;
  min_run_intervals: Record<string, MinRunIntervalItem>;
  created_at: string;
  updated_at: string;
}

/** 环境配置项 */
export interface EnvConfigItem {
  key: string;
  value: string;
  is_sensitive: boolean;
}

