import uuid

from sqlalchemy import (
    TIMESTAMP,
    Boolean,
    Column,
    DateTime,
    ForeignKey,
    Integer,
    String,
    Text,
    func,
)
from sqlalchemy.orm import relationship

from src.core.models.base import Base


class Session(Base):
    """
    User Model: ORM class for User Entity
    """

    __tablename__ = "sessions"

    id = Column(Integer, primary_key=True, index=True, autoincrement=True)
    session_id = Column(String(50), index=True, unique=True, nullable=True)
    ip_addr = Column(String(255))
    token = Column(Text)
    device = Column(String(255), nullable=True)
    platform = Column(String(255), nullable=True)
    os = Column(String(255), nullable=True)
    user_agent = Column(String(255), nullable=True)
    created_at = Column(DateTime, server_default=func.now())
    expires_at = Column(DateTime)
    refreshed_at = Column(DateTime)
    persist = Column(Boolean, default=False)
    location = Column(String(255), nullable=True)
    referer = Column(String(255), nullable=True)

    # Geo fields (from IP info) — NEW FIELDS
    city = Column(String(255), nullable=True)
    region = Column(String(255), nullable=True)
    country = Column(String(10), nullable=True)
    loc = Column(String(50), nullable=True)
    postal = Column(String(20), nullable=True)
    timezone = Column(String(100), nullable=True)

    # Device details — NEW FIELDS
    browser = Column(String(100), nullable=True)
    is_mobile = Column(Boolean, nullable=True)
    os = Column(String(255), nullable=True)

    user_id = Column(Integer, ForeignKey("users.id"))
    user = relationship("Users", back_populates="sessions")
