package cn.nianxx.thhotel.platform.message.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.time.LocalDateTime;

/**
 * 来源消息索引实体。保存查询和幂等需要的安全字段，不保存完整正文。
 */
@TableName("platform_source_message_inbox")
public class SourceMessageInboxEntity {

    /** 本项目内部 SourceMessage ID，作为平台侧关联来源消息的主键。 */
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;
    /** 酒店或业务上下文 ID，用于隔离不同酒店的外部消息 ID。 */
    private String hotelId;
    /** 来源提供方稳定代码，例如 AGENTBUS。 */
    private String provider;
    /** 来源渠道稳定代码，例如 EMAIL。 */
    private String channel;
    /** 外部邮件系统中的单封邮件唯一 ID，是幂等键的一部分。 */
    private String externalMessageId;
    /** 外部邮件链或会话 ID，用于查询同一邮件线程。 */
    private String externalConversationId;
    /** AgentBus frame ID，仅用于排查推送帧，不作为业务唯一键。 */
    private String providerFrameId;
    /** AgentBus session ID，仅用于排查连接会话，不作为邮件链 ID。 */
    private String providerSessionId;
    /** 原始 payload 的 SHA-256 哈希，用于判断重复投递内容是否变化。 */
    private String payloadSha256;
    /** 捕获状态稳定代码，例如 RECEIVED 或 FAILED。 */
    private String captureStatus;
    /** 重复投递命中时 payload 是否与首次保存内容不同。 */
    private Boolean duplicatePayloadChanged;
    /** 安全错误摘要，不包含正文、附件 URL、Token 或个人敏感信息。 */
    private String safeErrorSummary;
    /** 邮件来源接收 UTC 时间，缺失时使用本项目接收消息的 UTC 时间。 */
    private LocalDateTime receivedAt;
    /** 来源系统提供的邮件发送 UTC 时间，缺失时为空。 */
    private LocalDateTime sourceSentAt;
    /** 发件人展示值，业务人员需要识别真实发件人，当前只清理首尾空白不打码。 */
    private String senderSummary;
    /** 脱敏后的邮件主题，普通查询可展示。 */
    private String subject;
    /** 脱敏后的正文短摘要，普通查询可展示。 */
    private String safeSnippet;
    /** 记录创建 UTC 时间。 */
    private LocalDateTime createdAt;
    /** 记录更新 UTC 时间。 */
    private LocalDateTime updatedAt;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getHotelId() {
        return hotelId;
    }

    public void setHotelId(String hotelId) {
        this.hotelId = hotelId;
    }

    public String getProvider() {
        return provider;
    }

    public void setProvider(String provider) {
        this.provider = provider;
    }

    public String getChannel() {
        return channel;
    }

    public void setChannel(String channel) {
        this.channel = channel;
    }

    public String getExternalMessageId() {
        return externalMessageId;
    }

    public void setExternalMessageId(String externalMessageId) {
        this.externalMessageId = externalMessageId;
    }

    public String getExternalConversationId() {
        return externalConversationId;
    }

    public void setExternalConversationId(String externalConversationId) {
        this.externalConversationId = externalConversationId;
    }

    public String getProviderFrameId() {
        return providerFrameId;
    }

    public void setProviderFrameId(String providerFrameId) {
        this.providerFrameId = providerFrameId;
    }

    public String getProviderSessionId() {
        return providerSessionId;
    }

    public void setProviderSessionId(String providerSessionId) {
        this.providerSessionId = providerSessionId;
    }

    public String getPayloadSha256() {
        return payloadSha256;
    }

    public void setPayloadSha256(String payloadSha256) {
        this.payloadSha256 = payloadSha256;
    }

    public String getCaptureStatus() {
        return captureStatus;
    }

    public void setCaptureStatus(String captureStatus) {
        this.captureStatus = captureStatus;
    }

    public Boolean getDuplicatePayloadChanged() {
        return duplicatePayloadChanged;
    }

    public void setDuplicatePayloadChanged(Boolean duplicatePayloadChanged) {
        this.duplicatePayloadChanged = duplicatePayloadChanged;
    }

    public String getSafeErrorSummary() {
        return safeErrorSummary;
    }

    public void setSafeErrorSummary(String safeErrorSummary) {
        this.safeErrorSummary = safeErrorSummary;
    }

    public LocalDateTime getReceivedAt() {
        return receivedAt;
    }

    public void setReceivedAt(LocalDateTime receivedAt) {
        this.receivedAt = receivedAt;
    }

    public LocalDateTime getSourceSentAt() {
        return sourceSentAt;
    }

    public void setSourceSentAt(LocalDateTime sourceSentAt) {
        this.sourceSentAt = sourceSentAt;
    }

    public String getSenderSummary() {
        return senderSummary;
    }

    public void setSenderSummary(String senderSummary) {
        this.senderSummary = senderSummary;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public String getSafeSnippet() {
        return safeSnippet;
    }

    public void setSafeSnippet(String safeSnippet) {
        this.safeSnippet = safeSnippet;
    }

    public LocalDateTime getCreatedAt() {
        return createdAt;
    }

    public void setCreatedAt(LocalDateTime createdAt) {
        this.createdAt = createdAt;
    }

    public LocalDateTime getUpdatedAt() {
        return updatedAt;
    }

    public void setUpdatedAt(LocalDateTime updatedAt) {
        this.updatedAt = updatedAt;
    }
}
