"""Panorama model."""
import uuid
from datetime import datetime
from sqlalchemy import Column, DateTime, Float, ForeignKey, Integer, JSON, String
from sqlalchemy.orm import relationship
from app.database import Base

class Panorama(Base):
    __tablename__ = "panoramas"
    id = Column(String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
    room_id = Column(String(36), ForeignKey("rooms.id", ondelete="CASCADE"), nullable=False, index=True)
    image_url = Column(String(500), nullable=False)
    thumbnail_url = Column(String(500), nullable=True)
    sequence = Column(Integer, default=0, nullable=False)
    default_yaw = Column(Float, default=0.0, nullable=False)
    default_pitch = Column(Float, default=0.0, nullable=False)
    capture_order = Column(Integer, default=0, nullable=False)
    position_x = Column(Float, default=0.0, nullable=False)
    position_y = Column(Float, default=0.0, nullable=False)
    position_z = Column(Float, default=0.0, nullable=False)
    extra_data = Column(JSON, nullable=True)
    created_at = Column(DateTime, default=datetime.utcnow, nullable=False)
    updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False)
    room = relationship("Room", back_populates="panoramas", lazy="selectin")
    hotspots_from = relationship("Hotspot", foreign_keys="Hotspot.from_pano_id", back_populates="from_pano", lazy="selectin", cascade="all, delete-orphan")
    hotspots_to = relationship("Hotspot", foreign_keys="Hotspot.to_pano_id", back_populates="to_pano", lazy="selectin")
