/**
 * @description 定时任务相关类型定义
 * @author yslg
 * @since 2025-10-25
 */

import { BaseDTO } from '../base';

/**
 * 定时任务配置
 */
export interface CrontabTask extends BaseDTO {
  /** 任务ID */
  taskId?: string;
  /** 任务名称 */
  taskName?: string;
  /** 任务分组 */
  taskGroup?: string;
  /** 元数据ID（关联任务元数据表） */
  metaId?: string;
  /** 是否使用默认接收人 */
  defaultRecipient?: boolean;
  /** Bean名称 */
  beanName?: string;
  /** 方法名称 */
  methodName?: string;
  /** 方法参数 */
  methodParams?: string;
  /** Cron表达式 */
  cronExpression?: string;
  /** 任务状态（0:暂停 1:运行中） */
  status?: number;
  /** 任务描述 */
  description?: string;
  /** 是否允许并发执行（0:否 1:是） */
  concurrent?: number;
  /** 错过执行策略（1:立即执行 2:执行一次 3:放弃执行） */
  misfirePolicy?: number;
  /** 创建者 */
  creator?: string;
  /** 更新者 */
  updater?: string;
  /** 元数据名称（tb_crontab_task_meta.name） */
  metaName?: string;
  /** 元数据描述（tb_crontab_task_meta.description） */
  metaDescription?: string;
}

/**
 * 定时任务执行日志
 */
export interface CrontabLog extends BaseDTO {
  /** 日志ID */
  logId?: string;
  /** 任务ID */
  taskId?: string;
  /** 任务名称 */
  taskName?: string;
  /** 任务分组 */
  taskGroup?: string;
  /** Bean名称 */
  beanName?: string;
  /** 方法名称 */
  methodName?: string;
  /** 方法参数 */
  methodParams?: string;
  /** 执行状态（0:失败 1:成功） */
  executeStatus?: number;
  /** 执行结果信息 */
  executeMessage?: string;
  /** 异常信息 */
  exceptionInfo?: string;
  /** 开始时间 */
  startTime?: string;
  /** 结束时间 */
  endTime?: string;
  /** 执行时长（毫秒） */
  executeDuration?: number;
}

/**
 * 新闻爬虫配置
 */
export interface NewsCrawlerConfig {
  /** 配置ID */
  id?: string;
  /** 爬虫名称 */
  name?: string;
  /** 目标URL */
  targetUrl?: string;
  /** 爬取规则 */
  crawlRule?: string;
  /** 是否启用 */
  enabled?: boolean;
  /** Cron表达式 */
  cronExpression?: string;
  /** 最后执行时间 */
  lastExecuteTime?: string;
  /** 状态 */
  status?: number;
}

/**
 * 数据采集项
 */
export interface DataCollectionItem extends BaseDTO {
  /** 采集项ID */
  itemId?: string;
  /** 日志ID */
  logId?: string;
  /** 任务ID */
  taskId?: string;
  /** 任务名称 */
  taskName?: string;
  /** 标题 */
  title?: string;
  /** 内容（HTML格式） */
  content?: string;
  isAudited?:boolean;
  /** 来源URL */
  sourceUrl?: string;
  /** 发布时间 */
  publishTime?: string;
  /** 作者 */
  author?: string;
  /** 摘要 */
  summary?: string;
  /** 封面图片 */
  coverImage?: string;
  /** 分类 */
  category?: string;
  /** 来源（人民日报、新华社等） */
  source?: string;
  /** 标签（多个用逗号分隔） */
  tags?: string;
  /** 图片列表（JSON格式） */
  images?: string;
  /** 状态（0:未处理 1:已转换 2:已忽略） */
  status?: number;
  /** 转换时间 */
  convertTime?: string;
  /** 转换后的资源ID */
  resourceId?: string;
  /** 错误信息 */
  errorMessage?: string;
  /** 爬取时间 */
  crawlTime?: string;
  /** 处理时间 */
  processTime?: string;
  /** 处理人 */
  processor?: string;
  /** 解析状态 */
  itemExecuteStatus?: number;
  itemExecuteMessage?: string;
}

/**
 * 爬虫任务参数
 */
export interface CrontabParam {
  /** 参数名称 */
  name: string;
  /** 参数描述 */
  description: string;
  /** 参数类型 */
  type: string;
  /** 默认值 */
  value: any;
  required: boolean;
}

/**
 * 爬虫任务模板方法
 */
export interface CrontabMethod {
  /** 方法名称 */
  name: string;
  /** Bean类名 */
  clazz?: string;
  /** 执行方法名 */
  excuete_method?: string;
  /** Python脚本路径 */
  path: string;
  /** 元数据ID（从数据库加载时使用） */
  metaId?: string;
  /** 参数定义列表 */
  params?: CrontabParam[];
}

/**
 * 爬虫任务模板项
 */
export interface CrontabItem {
  /** 模板名称 */
  name: string;
  /** 可用方法列表 */
  methods: CrontabMethod[];
}

/**
 * 定时任务元数据
 */
export interface TaskMeta extends BaseDTO {
  /** 元数据ID */
  metaId?: string;
  /** 任务名称 */
  name?: string;
  /** 任务描述 */
  description?: string;
  /** 任务分类 */
  category?: string;
  /** Bean名称 */
  beanName?: string;
  /** 方法名称 */
  methodName?: string;
  /** 脚本路径 */
  scriptPath?: string;
  /** 参数模式(JSON Schema) */
  paramSchema?: string;
  /** 是否自动发布 */
  autoPublish?: boolean;
  /** 排序 */
  sortOrder?: number;
  /** 创建者 */
  creator?: string;
  /** 更新者 */
  updater?: string;
}

/**
 * 邮件默认接收人
 */
export interface EmailDefault extends BaseDTO {
  /** 默认ID */
  defaultId?: string;
  /** 元数据ID */
  metaId?: string;
  /** 用户ID */
  userId?: string;
  userEmail?: string;
  username?:string;
  /** 创建者 */
  creator?: string;
  /** 更新者 */
  updater?: string;
}

/**
 * 邮件接收人
 */
export interface EmailRecipient extends BaseDTO {
  /** 接收人ID */
  recipientId?: string;
  /** 任务ID */
  taskId?: string;
  /** 用户ID */
  userId?: string;
  /** 邮箱 */
  email?: string;
  /** 姓名 */
  name?: string;
  /** 创建者 */
  creator?: string;
  /** 更新者 */
  updater?: string;
}

/**
 * 接收人用户信息
 */
export interface RecipientUserInfo {
  /** 用户ID */
  userId: string;
  /** 用户邮箱 */
  userEmail: string;
  /** 用户名称 */
  username: string;
}

/**
 * 创建任务请求
 */
export interface CreateTaskRequest {
  /** 任务信息 */
  task: CrontabTask;
  /** 任务元数据ID */
  metaId: string;
  /** 额外添加的接收人列表 */
  additionalRecipients?: RecipientUserInfo[];
}

