// ============================================
// 1. 渠道类型枚举
// ============================================
export enum NotificationChannelType {
  WEWORK = 'WEWORK',  // 企业微信
  EMAIL = 'EMAIL'      // 邮件
}

// 通知渠道状态现在使用布尔值 enabled 字段

// ============================================
// 2. 配置基类（不直接使用，用于类型推断）
// ============================================
export interface BaseNotificationConfigDTO {
  // 运行时通过 channelType 判断具体类型
}

// ============================================
// 3. 企业微信配置
// ============================================
export interface WeworkNotificationConfigDTO extends BaseNotificationConfigDTO {
  /** 渠道类型（与外层保持一致） */
  channelType: NotificationChannelType.WEWORK;
  
  /**
   * 企业微信机器人 Webhook Key（必填）
   * 完整URL格式: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={key}
   */
  key: string;
}

// ============================================
// 4. 邮件配置
// ============================================
export interface EmailNotificationConfigDTO extends BaseNotificationConfigDTO {
  /** 渠道类型（与外层保持一致） */
  channelType: NotificationChannelType.EMAIL;
  
  /** SMTP服务器地址（必填） */
  smtpHost: string;
  
  /** SMTP服务器端口（必填） */
  smtpPort: number;
  
  /** SMTP用户名（必填） */
  username: string;
  
  /** SMTP密码（必填） */
  password: string;
  
  /** 发件人邮箱（必填） */
  from: string;
  
  /** 发件人名称（可选） */
  fromName?: string;
  
  /** 是否使用SSL（可选，默认true） */
  useSsl?: boolean;
}

// ============================================
// 5. 通知渠道DTO（主要修改）
// ============================================
export interface NotificationChannelDTO {
  id?: number;
  
  /** 渠道名称 */
  name: string;
  
  /** 渠道类型 */
  channelType: NotificationChannelType;
  
  /** 
   * 渠道配置（根据 channelType 不同而不同）
   * - WEWORK: WeworkNotificationConfigDTO
   * - EMAIL: EmailNotificationConfigDTO
   */
  config: WeworkNotificationConfigDTO | EmailNotificationConfigDTO;
  
  /** 是否启用 */
  enabled: boolean;
  
  /** 描述 */
  description?: string;
  
  /** 创建时间 */
  createTime?: string;
  
  /** 创建人 */
  createBy?: string;
  
  /** 更新时间 */
  updateTime?: string;
  
  /** 更新人 */
  updateBy?: string;
  
  /** 版本号 */
  version?: number;
  
  /** 是否删除 */
  deleted?: boolean;
}

// 兼容旧类型名称
export type NotificationChannel = NotificationChannelDTO;
export type WeworkConfig = WeworkNotificationConfigDTO;
export type EmailConfig = EmailNotificationConfigDTO;

// ============================================
// 6. 类型守卫函数
// ============================================

/**
 * 判断是否为企业微信配置
 */
export function isWeworkConfig(
  config: BaseNotificationConfigDTO
): config is WeworkNotificationConfigDTO {
  return 'channelType' in config && (config as any).channelType === NotificationChannelType.WEWORK && 'key' in config;
}

/**
 * 判断是否为邮件配置
 */
export function isEmailConfig(
  config: BaseNotificationConfigDTO
): config is EmailNotificationConfigDTO {
  return 'channelType' in config && (config as any).channelType === NotificationChannelType.EMAIL && 'smtpHost' in config;
}

/**
 * 渠道类型选项
 */
export interface ChannelTypeOption {
  code: string;                                    // 类型编码
  label: string;                                   // 类型标签
  description: string;                             // 类型描述
}

/**
 * 查询条件
 */
export interface NotificationChannelQuery {
  name?: string;                                   // 渠道名称（模糊查询）
  channelType?: NotificationChannelType;           // 渠道类型
  enabled?: boolean;                               // 是否启用
  
  // 分页参数
  page?: number;
  size?: number;
  sort?: string;
}

/**
 * 通知请求DTO
 */
export interface NotificationRequest {
  channelId: number;                               // 通知渠道ID（必填）
  title?: string;                                  // 消息标题（可选）
  content: string;                                 // 消息内容（必填）
  receivers?: string[];                            // 收件人列表（可选）
  mentions?: string[];                             // @人列表（可选）
}

