# FILE: src/apps/pages/models/page_content.py
from __future__ import annotations

from typing import Optional
from uuid import UUID

from sqlalchemy import CheckConstraint, ForeignKey, String, UniqueConstraint
from sqlalchemy.dialects.postgresql import JSONB, UUID as PG_UUID
from sqlalchemy.orm import Mapped, mapped_column

from src.database.base import TenantModel

PAGE_SLUGS = ("global", "find", "availability", "map", "contact")


class TenantPageContent(TenantModel):
    __tablename__ = "tenant_page_content"

    __table_args__ = (
        UniqueConstraint("tenant_id", "page_slug", name="uq_tenant_page"),
        CheckConstraint(
            "page_slug IN ('global','find','availability','map','contact')",
            name="ck_tenant_page_content_slug",
        ),
    )

    # Override tenant_id with explicit FK
    tenant_id: Mapped[UUID] = mapped_column(
        PG_UUID(as_uuid=True),
        ForeignKey("accounts.id", ondelete="CASCADE"),
        nullable=False,
        index=True,
    )

    page_slug: Mapped[str] = mapped_column(String(20), nullable=False)
    content: Mapped[dict] = mapped_column(JSONB, nullable=False, default=dict)
    updated_by: Mapped[Optional[UUID]] = mapped_column(
        PG_UUID(as_uuid=True),
        ForeignKey("users.id", ondelete="SET NULL"),
        nullable=True,
    )
