import uuid
from datetime import datetime

from sqlalchemy import String, Integer, Text, DateTime, Uuid, func
from sqlalchemy.orm import Mapped, mapped_column

from app.database import Base


class SanctuaryEntry(Base):
    __tablename__ = "sanctuary_entries"

    id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, default=uuid.uuid4)
    entry_type: Mapped[str] = mapped_column(String(64), nullable=False)  # document, decision, vote_result
    reference_id: Mapped[uuid.UUID] = mapped_column(Uuid, nullable=False)
    title: Mapped[str | None] = mapped_column(String(256))
    content_hash: Mapped[str] = mapped_column(String(128), nullable=False)  # SHA-256
    ipfs_cid: Mapped[str | None] = mapped_column(String(128))
    chain_tx_hash: Mapped[str | None] = mapped_column(String(128))
    chain_block: Mapped[int | None] = mapped_column(Integer)
    metadata_json: Mapped[str | None] = mapped_column(Text)  # JSON string for extra data
    created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
