"""
Heap model definitions
"""
from sqlalchemy import Column, String, Integer, Boolean, DateTime, ForeignKey, Table, Index
from sqlalchemy.sql import func
from sqlalchemy.orm import relationship
import uuid

from app.database import Base

# Association table for many-to-many relationship with additional fields
heap_photos = Table(
    'heap_photos',
    Base.metadata,
    Column('heap_id', String, ForeignKey('heaps.id', ondelete='CASCADE'), primary_key=True),
    Column('photo_id', String, ForeignKey('photos.id', ondelete='CASCADE'), primary_key=True),
    Column('added_at', DateTime, server_default=func.now()),
    Column('sort_order', Integer, default=0),
    Index('ix_heap_photos_heap_id', 'heap_id'),
    Index('ix_heap_photos_photo_id', 'photo_id'),
)

class Heap(Base):
    __tablename__ = 'heaps'

    id = Column(String, primary_key=True, default=lambda: str(uuid.uuid4()))
    name = Column(String, nullable=False)
    created_at = Column(DateTime, server_default=func.now())
    updated_at = Column(DateTime, onupdate=func.now())
    is_active = Column(Boolean, default=False)  # For active heap feature

    # Owner
    user_id = Column(String, ForeignKey('users.id'), nullable=True, index=True)
    
    # Relationships
    photos = relationship("Photo", secondary=heap_photos, backref="heaps")

class HeapPhoto:
    """Helper class for heap-photo associations (not a table model)"""
    pass