"""
Implicit Emotions Storage Model

数据库模型：存储用户的隐性记忆画像和情绪建议数据
替代原有的Redis缓存方式
"""
import uuid
from datetime import datetime
from sqlalchemy import Column, String, Text, DateTime, Index
from sqlalchemy.dialects.postgresql import UUID, JSONB
from app.db import Base


class ImplicitEmotionsStorage(Base):
    """隐性记忆和情绪存储表"""
    
    __tablename__ = "implicit_emotions_storage"
    
    # 主键
    id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, comment="主键ID")
    
    # 用户标识（unique=True会自动创建唯一索引）
    end_user_id = Column(String(255), nullable=False, unique=True, comment="终端用户ID")
    
    # 隐性记忆画像数据（JSON格式）
    implicit_profile = Column(JSONB, nullable=True, comment="隐性记忆用户画像数据")
    
    # 情绪建议数据（JSON格式）
    emotion_suggestions = Column(JSONB, nullable=True, comment="情绪个性化建议数据")
    
    # 时间戳
    created_at = Column(DateTime, nullable=False, default=datetime.utcnow, comment="创建时间")
    updated_at = Column(DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow, comment="更新时间")
    
    # 数据生成时间（用于业务逻辑）
    implicit_generated_at = Column(DateTime, nullable=True, comment="隐性记忆画像生成时间")
    emotion_generated_at = Column(DateTime, nullable=True, comment="情绪建议生成时间")
    
    # 索引（只为updated_at创建索引，end_user_id的unique约束已自动创建索引）
    __table_args__ = (
        Index('idx_updated_at', 'updated_at'),
    )
    
    def __repr__(self):
        return f"<ImplicitEmotionsStorage(id={self.id}, end_user_id={self.end_user_id})>"
