from sqlalchemy import JSON, Boolean, Column, Float, ForeignKey, Integer, String, Text
from sqlalchemy.orm import relationship

from app.models.base import BaseModel


class Agent(BaseModel):
    __tablename__ = "agents"
    name = Column(String(255), nullable=False)
    description = Column(Text, nullable=True)
    type = Column(String(50), default="chat")
    status = Column(String(50), default="online")
    running = Column(Boolean, default=False)
    tenant_id = Column(Integer, ForeignKey("public.tenants.id"), nullable=True, index=True)
    created_by = Column(Integer, ForeignKey("public.users.id"), nullable=True)
    model_id = Column(Integer, ForeignKey("public.models.id"), nullable=True, index=True)
    max_iterations = Column(Integer, default=10)
    temperature = Column(Float, default=0.7)
    max_tokens = Column(Integer, default=2048)
    system_prompt = Column(Text, nullable=True)
    welcome_message = Column(Text, nullable=True)
    model = relationship("Model")
    knowledge_bases = Column(JSON, nullable=True)
    actions = Column(JSON, nullable=True)
    skills = Column(JSON, nullable=True)
    quick_actions = Column(JSON, nullable=True)
    use_reranker = Column(Boolean, default=True, nullable=False)


class ChatMessage(BaseModel):
    __tablename__ = "chat_messages"
    agent_id = Column(Integer, ForeignKey("agents.id"), nullable=False)
    user_id = Column(Integer, ForeignKey("public.users.id"), nullable=True)
    conversation_id = Column(String(36), nullable=False, index=True)
    role = Column(String(20), nullable=False)
    content = Column(Text, nullable=False)
    sources = Column(JSON, nullable=True)
