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

class PublishVersion(Base):
    __tablename__ = "publish_versions"
    id = Column(String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
    house_id = Column(String(36), ForeignKey("houses.id", ondelete="CASCADE"), nullable=False, index=True)
    version_number = Column(Integer, nullable=False)
    status = Column(String(50), default="draft", nullable=False)
    snapshot_data = Column(JSON, nullable=True)
    parent_version_id = Column(String(36), nullable=True)
    rolled_back_from_id = Column(String(36), nullable=True)
    created_by = Column(String(36), nullable=True)
    reviewed_by = Column(String(36), nullable=True)
    published_by = Column(String(36), nullable=True)
    changelog = Column(Text, nullable=True)
    review_notes = Column(Text, nullable=True)
    created_at = Column(DateTime, default=datetime.utcnow, nullable=False)
    updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False)
    submitted_at = Column(DateTime, nullable=True)
    reviewed_at = Column(DateTime, nullable=True)
    published_at = Column(DateTime, nullable=True)
    house = relationship("House", back_populates="publish_versions", lazy="selectin")
