# # app/models/visitor.py

# from sqlalchemy import Column, Integer, String, ForeignKey, TIMESTAMP, func
# from sqlalchemy.orm import relationship
# from app.core.database import Base

# # Visitor Model

# class Visitor(Base):
#     __tablename__ = "visitors"

#     id = Column(Integer, primary_key=True, index=True)
    
#     visitor_id = Column(String(100), unique=True, nullable=False)
#     client_id = Column(Integer, ForeignKey("clients.id"))

#     name = Column(String(100), nullable=False)

#     ip_address = Column(String(50))
#     user_agent = Column(String(255))
#     created_at = Column(TIMESTAMP, server_default=func.now())

#     # FIX: async safe relationship
#     client = relationship("Client", backref="visitors", lazy="selectin")
#     messages = relationship("Message", back_populates="visitor", lazy="selectin")
    

# ---------------------------------------------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------------
from sqlalchemy import Column, Integer, String, ForeignKey, TIMESTAMP, func
from sqlalchemy.orm import relationship
from app.core.database import Base

class Visitor(Base):
    __tablename__ = "visitors"

    id = Column(Integer, primary_key=True, index=True)

    #-------------------------- Unique browser visitor ID --------------------------
    visitor_id = Column(String(100), unique=True, nullable=False)
    client_id = Column(Integer, ForeignKey("clients.id"), nullable=False)

    # -------------------------- PRE-CHAT OPTIONAL FIELDS --------------------------
    name = Column(String(100), nullable=True)
    email = Column(String(150), nullable=True)
    phone = Column(String(30), nullable=True)

    # -------------------------- AUTO-COLLECTED GEO FIELDS --------------------------
    city = Column(String(100), nullable=True)
    region = Column(String(100), nullable=True)
    country = Column(String(100), nullable=True)

    # -------------------------- TECHNICAL FIELDS --------------------------
    ip_address = Column(String(50), nullable=True)
    user_agent = Column(String(255), nullable=True)
    created_at = Column(TIMESTAMP(timezone=True), server_default=func.now())

    # -------------------------- RELATIONSHIPS --------------------------
    client = relationship("Client", backref="visitors", lazy="selectin")
    messages = relationship("Message", back_populates="visitor", lazy="selectin")
    assignments = relationship("AgentAssignmentHistory", back_populates="visitor", lazy="selectin")
