-- M001 SourceMessage Inbox：来源消息索引表，保存单封邮件的幂等键、状态和安全摘要。
CREATE TABLE platform_source_message_inbox (
    id BIGINT NOT NULL COMMENT '本项目内部 SourceMessage ID，供后续业务流程关联来源邮件',
    hotel_id VARCHAR(64) NOT NULL COMMENT '酒店或业务上下文 ID，避免不同酒店外部邮件 ID 冲突',
    provider VARCHAR(32) NOT NULL COMMENT '来源提供方稳定代码，例如 AGENTBUS',
    channel VARCHAR(32) NOT NULL COMMENT '来源渠道稳定代码，例如 EMAIL',
    external_message_id VARCHAR(256) NULL COMMENT '外部邮件系统中的单封邮件唯一 ID，对应 AgentBus source.external_message_id；解析失败时允许为空以保留失败记录',
    external_conversation_id VARCHAR(256) NULL COMMENT '外部邮件链或会话 ID，对应 AgentBus source.external_conversation_id',
    provider_frame_id VARCHAR(128) NULL COMMENT 'AgentBus frame ID，仅用于排查推送帧，不作为邮件唯一 ID',
    provider_session_id VARCHAR(128) NULL COMMENT 'AgentBus session ID，仅用于排查连接会话，不作为邮件链 ID',
    payload_sha256 CHAR(64) NOT NULL COMMENT '规范 JSON 的 SHA-256 哈希，用于排查重复投递 payload 是否变化',
    capture_status VARCHAR(32) NOT NULL COMMENT '捕获状态，第一阶段使用 RECEIVED 或 FAILED',
    duplicate_payload_changed TINYINT(1) NOT NULL DEFAULT 0 COMMENT '重复投递命中时 payload 是否与首次保存内容不同',
    safe_error_summary VARCHAR(512) NULL COMMENT '安全错误摘要，不包含正文、HTML、附件 URL、Token 或个人敏感信息',
    received_at DATETIME(6) NOT NULL COMMENT '本项目接收时间，按 UTC 写入',
    source_sent_at DATETIME(6) NULL COMMENT '邮件来源发送时间，payload 提供时保存，按 UTC 写入',
    sender_summary VARCHAR(256) NULL COMMENT '发送人安全摘要，列表可展示，不保存完整敏感展示值',
    subject VARCHAR(512) NULL COMMENT '邮件主题，作为安全摘要字段展示',
    safe_snippet VARCHAR(512) NULL COMMENT '邮件安全短摘要，不包含完整正文、HTML、附件 URL 或敏感凭证',
    created_at DATETIME(6) NOT NULL COMMENT '记录创建时间，按 UTC 写入',
    updated_at DATETIME(6) NOT NULL COMMENT '记录更新时间，按 UTC 写入',
    PRIMARY KEY (id),
    UNIQUE KEY uk_source_message_inbox_idempotency (hotel_id, provider, channel, external_message_id),
    KEY idx_source_message_inbox_conversation (hotel_id, external_conversation_id),
    KEY idx_source_message_inbox_status_time (hotel_id, capture_status, received_at)
) COMMENT='SourceMessage Inbox 来源消息索引表，保存邮件来源事实的幂等键、状态和安全摘要';

-- M001 SourceMessage Inbox：原始载荷表，保存 AgentBus 规范 JSON，用于追溯和排查。
CREATE TABLE platform_source_message_payload (
    id BIGINT NOT NULL COMMENT '原始载荷记录 ID',
    inbox_id BIGINT NOT NULL COMMENT '所属 SourceMessage Inbox 记录 ID',
    payload_json LONGTEXT NOT NULL COMMENT 'AgentBus 规范 JSON 原始载荷，普通查询接口不得返回',
    payload_sha256 CHAR(64) NOT NULL COMMENT 'payload_json 的 SHA-256 哈希',
    schema_version VARCHAR(64) NULL COMMENT 'payload 结构版本，AgentBus 有提供则保存，否则使用本项目捕获版本',
    created_at DATETIME(6) NOT NULL COMMENT '记录创建时间，按 UTC 写入',
    PRIMARY KEY (id),
    UNIQUE KEY uk_source_message_payload_inbox (inbox_id),
    KEY idx_source_message_payload_hash (payload_sha256)
) COMMENT='SourceMessage 原始载荷表，用于追溯、排查和后续受控重新处理';

-- M001 SourceMessage Inbox：正文表，正文只通过后续受控原文读取接口返回。
CREATE TABLE platform_source_message_body (
    id BIGINT NOT NULL COMMENT '正文记录 ID',
    inbox_id BIGINT NOT NULL COMMENT '所属 SourceMessage Inbox 记录 ID',
    content_type VARCHAR(32) NOT NULL COMMENT '正文类型，例如 TEXT、HTML、MIXED',
    text_body LONGTEXT NULL COMMENT '纯文本正文，用于摘要、搜索和后续 AI 处理',
    html_body LONGTEXT NULL COMMENT 'HTML 原文，前端展示前必须 sanitize',
    body_sha256 CHAR(64) NOT NULL COMMENT '正文内容 SHA-256 哈希，用于排查正文是否变化',
    created_at DATETIME(6) NOT NULL COMMENT '记录创建时间，按 UTC 写入',
    PRIMARY KEY (id),
    UNIQUE KEY uk_source_message_body_inbox (inbox_id)
) COMMENT='SourceMessage 正文表，保存 text/html 正文，普通查询接口不得返回';

-- M001 SourceMessage Inbox：媒体引用表，只保存 AgentBus 已处理好的长期有效 URL，不下载文件。
CREATE TABLE platform_source_message_media (
    id BIGINT NOT NULL COMMENT '媒体引用记录 ID',
    inbox_id BIGINT NOT NULL COMMENT '所属 SourceMessage Inbox 记录 ID',
    media_type VARCHAR(32) NOT NULL COMMENT '媒体类型，INLINE_IMAGE 表示正文图片，ATTACHMENT 表示附件',
    file_name VARCHAR(512) NULL COMMENT '文件名，附件通常有，正文图片可能为空',
    content_type VARCHAR(128) NULL COMMENT '媒体 MIME 类型，例如 image/png 或 application/pdf',
    size_bytes BIGINT NULL COMMENT '文件大小字节数，AgentBus 有返回则保存，没有则为空',
    external_url VARCHAR(2048) NOT NULL COMMENT 'AgentBus 返回的长期有效访问 URL，只能通过受控原文读取接口返回',
    external_media_id VARCHAR(256) NULL COMMENT 'AgentBus 或邮件系统中的媒体 ID，用于排查和追溯',
    created_at DATETIME(6) NOT NULL COMMENT '记录创建时间，按 UTC 写入',
    PRIMARY KEY (id),
    KEY idx_source_message_media_inbox (inbox_id),
    KEY idx_source_message_media_type (inbox_id, media_type)
) COMMENT='SourceMessage 媒体引用表，保存正文图片和附件 URL 引用，不保存二进制文件';
