package com.qqchen.deploy.backend.notification.entity;

import com.qqchen.deploy.backend.framework.annotation.LogicDelete;
import com.qqchen.deploy.backend.framework.domain.Entity;
import com.qqchen.deploy.backend.notification.enums.NotificationChannelTypeEnum;
import com.vladmihalcea.hibernate.type.json.JsonType;
import jakarta.persistence.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.annotations.Type;

import java.util.Map;

/**
 * 通知模板实体
 *
 * @author qqchen
 * @since 2025-11-12
 */
@Data
@EqualsAndHashCode(callSuper = true)
@jakarta.persistence.Entity
@Table(name = "sys_notification_template")
@LogicDelete
public class NotificationTemplate extends Entity<Long> {

    /**
     * 模板名称
     */
    @Column(nullable = false, length = 100)
    private String name;

    /**
     * 模板编码（唯一标识）
     */
    @Column(nullable = false, length = 50, unique = true)
    private String code;

    /**
     * 模板描述
     */
    @Column(length = 500)
    private String description;

    /**
     * 渠道类型
     */
    @Enumerated(EnumType.STRING)
    @Column(nullable = false, length = 20)
    private NotificationChannelTypeEnum channelType;

    /**
     * 标题模板（FreeMarker格式，可选）
     */
    @Column(length = 200)
    private String titleTemplate;

    /**
     * 内容模板（FreeMarker格式）
     */
    @Column(nullable = false, columnDefinition = "TEXT")
    private String contentTemplate;

    /**
     * 是否启用
     */
    @Column(nullable = false)
    private Boolean enabled = true;

    /**
     * 模板配置（JSON格式，不同渠道存储不同配置）
     */
    @Type(JsonType.class)
    @Column(columnDefinition = "JSON")
    private Map<String, Object> templateConfig;
}
