from sqlalchemy import Column, String, Integer, Boolean, DateTime, Text, ForeignKey, JSON
from sqlalchemy.dialects.postgresql import UUID
from uuid import uuid4
from datetime import datetime
from ..database import Base


class Stream(Base):
    __tablename__ = "streams"

    id = Column(UUID(as_uuid=True), primary_key=True, default=uuid4)
    title = Column(String(255), nullable=False)
    description = Column(Text)
    status = Column(String(50), default="archived", index=True)
    created_by = Column(UUID(as_uuid=True), ForeignKey("users.id", ondelete="SET NULL"), index=True)
    created_at = Column(DateTime(timezone=True), default=datetime.utcnow)
    updated_at = Column(DateTime(timezone=True), default=datetime.utcnow, onupdate=datetime.utcnow)
    duration_seconds = Column(Integer, default=0)
    thumbnail_url = Column(String(500))
    file_path = Column(String(500))
    hls_path = Column(String(500))
    hls_url = Column(String(500), nullable=True)
    hls_available = Column(Boolean, default=False)
    thumbnails_available = Column(Boolean, default=False)
    dash_path = Column(String(500))
    view_count = Column(Integer, default=0)
    is_public = Column(Boolean, default=True)
    twitch_vod_id = Column(String(50))  # Store Twitch VOD ID for reference
    streamer = Column(String(100))  # Store streamer name
    stream_date = Column(DateTime(timezone=True))  # Original stream date from Twitch
    stream_metadata = Column(JSON, nullable=True)  # Store additional metadata like game, chapters, etc.
    thumbnail_progress_generated = Column(Integer, default=0)
    thumbnail_progress_total = Column(Integer, default=0)
    thumbnail_progress_message = Column(String(500))
    thumbnail_progress_error = Column(String(500))
    thumbnail_progress_updated_at = Column(DateTime(timezone=True))
    stream_number = Column(Integer, unique=True, index=True, nullable=True)
