from datetime import datetime
from sqlalchemy import Column, Integer, String, ForeignKey, DateTime, Text
from sqlalchemy.orm import relationship

try:
    from src.utils.db import Base
except ImportError:
    from utils.db import Base


class SmartInventoryChatSession(Base):
    """
    Stores chat session metadata.
    Each session represents a conversation thread.
    """
    __tablename__ = "smart_inventory_chat_sessions"

    id = Column(Integer, primary_key=True, index=True, autoincrement=True)
    chat_session_id = Column(String(36), unique=True, nullable=False, index=True)
    company_id = Column(Integer, nullable=False, index=True)
    user_id = Column(Integer, ForeignKey("users.user_id", ondelete="CASCADE"), nullable=False, index=True)
    store_id = Column(Integer, ForeignKey("stores.store_id", ondelete="CASCADE"), nullable=False, index=True)
    branch_id = Column(Integer, ForeignKey("branches.branch_id", ondelete="CASCADE"), nullable=False, index=True)
    
    # Chat name derived from first question (truncated)
    chat_name = Column(String(100), nullable=True)
    
    created_at = Column(DateTime, default=datetime.utcnow)
    updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)

    # Relationships
    messages = relationship(
        "SmartInventoryChatMessage", 
        back_populates="session", 
        cascade="all, delete-orphan",
        order_by="SmartInventoryChatMessage.created_at"
    )


class SmartInventoryChatMessage(Base):
    """
    Stores individual chat messages (questions and answers).
    """
    __tablename__ = "smart_inventory_chat_messages"

    id = Column(Integer, primary_key=True, index=True, autoincrement=True)
    session_id = Column(
        Integer, 
        ForeignKey("smart_inventory_chat_sessions.id", ondelete="CASCADE"), 
        nullable=False, 
        index=True
    )
    
    # Use String instead of Enum to store lowercase values directly
    role = Column(String(20), nullable=False)  # 'user' or 'assistant'
    content = Column(Text, nullable=False)
    
    created_at = Column(DateTime, default=datetime.utcnow)

    # Relationships
    session = relationship("SmartInventoryChatSession", back_populates="messages")
