/**
 * 通知模板相关类型定义
 */
import type { BaseResponse, BaseQuery, Page } from '../../../../types/base';
import { NotificationChannelType } from '../../NotificationChannel/List/types';

// ============================================
// 1. 通知模板DTO
// ============================================
export interface NotificationTemplateDTO extends BaseResponse {
  /** 模板名称 */
  name: string;
  
  /** 模板编码（唯一标识） */
  code: string;
  
  /** 模板描述 */
  description?: string;
  
  /** 渠道类型 */
  channelType: NotificationChannelType;
  
  /** 标题模板（FreeMarker格式） */
  titleTemplate: string;
  
  /** 内容模板（FreeMarker格式） */
  contentTemplate: string;
  
  /** 模板配置（根据 channelType 不同而不同） */
  templateConfig?: WeworkTemplateConfig | EmailTemplateConfig;
}

// ============================================
// 2. 查询参数
// ============================================
export interface NotificationTemplateQuery extends BaseQuery {
  /** 模板名称（模糊查询） */
  name?: string;
  
  /** 模板编码 */
  code?: string;
  
  /** 渠道类型 */
  channelType?: NotificationChannelType;
  
  /** 启用状态 */
  enabled?: boolean;
}


// ============================================
// 6. 渠道类型选项
// ============================================
export interface ChannelTypeOption {
  code: NotificationChannelType;
  label: string;
  description: string;
}

// ============================================
// 5. 模板配置类型
// ============================================

/** 模板配置基类 */
export interface BaseTemplateConfig {
  // 运行时通过 channelType 判断具体类型
}

/** 企业微信模板配置 */
export interface WeworkTemplateConfig extends BaseTemplateConfig {
  /** 渠道类型（与外层保持一致，用于后端多态反序列化） */
  channelType: NotificationChannelType.WEWORK;
  /** 消息类型 */
  messageType: 'TEXT' | 'MARKDOWN' | 'FILE';
}

/** 邮件模板配置 */
export interface EmailTemplateConfig extends BaseTemplateConfig {
  /** 渠道类型（与外层保持一致，用于后端多态反序列化） */
  channelType: NotificationChannelType.EMAIL;
  /** 内容类型 */
  contentType: 'TEXT' | 'HTML';
  /** 优先级 */
  priority: 'LOW' | 'NORMAL' | 'HIGH';
}

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

/**
 * 判断是否为企业微信模板配置
 */
export function isWeworkTemplateConfig(
  config: BaseTemplateConfig,
  channelType: NotificationChannelType
): config is WeworkTemplateConfig {
  return channelType === 'WEWORK' && 'messageType' in config;
}

/**
 * 判断是否为邮件模板配置
 */
export function isEmailTemplateConfig(
  config: BaseTemplateConfig,
  channelType: NotificationChannelType
): config is EmailTemplateConfig {
  return channelType === 'EMAIL' && 'contentType' in config && 'priority' in config;
}

// ============================================
// 7. 模板渲染参数
// ============================================
export interface TemplateRenderRequest {
  /** 模板内容 */
  templateContext: string;
  
  /** 模板参数 */
  params: Record<string, any>;
}

