"""
Zone File Models for .ch and .li domain drops
"""
from datetime import datetime

from sqlalchemy import Column, Integer, String, DateTime, Boolean, Index

from app.database import Base


class ZoneSnapshot(Base):
    """Stores metadata about zone file snapshots (not the full data)"""
    __tablename__ = "zone_snapshots"
    
    id = Column(Integer, primary_key=True)
    tld = Column(String(10), nullable=False, index=True)  # 'ch' or 'li'
    snapshot_date = Column(DateTime, nullable=False, index=True)
    domain_count = Column(Integer, nullable=False)
    checksum = Column(String(64), nullable=False)  # SHA256 of sorted domain list
    created_at = Column(DateTime, default=datetime.utcnow)

    __table_args__ = (
        Index('ix_zone_snapshots_tld_date', 'tld', 'snapshot_date'),
    )


class DroppedDomain(Base):
    """Stores domains that were dropped (found in previous snapshot but not current)"""
    __tablename__ = "dropped_domains"
    
    id = Column(Integer, primary_key=True)
    domain = Column(String(255), nullable=False, index=True)
    tld = Column(String(10), nullable=False, index=True)
    dropped_date = Column(DateTime, nullable=False, index=True)
    length = Column(Integer, nullable=False)
    is_numeric = Column(Boolean, default=False)
    has_hyphen = Column(Boolean, default=False)
    created_at = Column(DateTime, default=datetime.utcnow)
    
    # Real-time availability status (checked via RDAP)
    # Possible values: 'available', 'dropping_soon', 'taken', 'unknown'
    availability_status = Column(String(20), default='unknown', index=True)
    rdap_status = Column(String(255), nullable=True)  # Raw RDAP status string
    last_status_check = Column(DateTime, nullable=True)
    deletion_date = Column(DateTime, nullable=True)  # When domain will be fully deleted

    __table_args__ = (
        Index('ix_dropped_domains_tld_date', 'tld', 'dropped_date'),
        Index('ix_dropped_domains_length', 'length'),
        Index('ix_dropped_domains_availability', 'availability_status'),
    )
