# FILE: src/apps/scheduling/models/scheduling_document.py
from __future__ import annotations

from uuid import UUID

from sqlalchemy import ForeignKey, Index, Integer, String
from sqlalchemy.dialects.postgresql import UUID as PG_UUID
from sqlalchemy.orm import Mapped, mapped_column

from src.database.base import TenantSoftDeleteModel


class SchedulingDocument(TenantSoftDeleteModel):
    """An S3-backed document attached to a service (INDL-34).

    The ``s3_key`` is server-constructed from the sniffed MIME type — never the
    user-supplied filename. The original filename is retained only in
    ``file_name`` for display. Soft-delete via ``deleted_at``.
    """

    __tablename__ = "scheduling_documents"

    __table_args__ = (
        Index("idx_scheduling_docs_service", "service_id", "deleted_at"),
    )

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

    service_id: Mapped[UUID] = mapped_column(
        PG_UUID(as_uuid=True),
        ForeignKey("services.id", ondelete="CASCADE"),
        nullable=False,
        index=True,
    )

    file_name: Mapped[str] = mapped_column(String(255), nullable=False)
    s3_key: Mapped[str] = mapped_column(String(500), nullable=False)
    file_size: Mapped[int] = mapped_column(Integer, nullable=False)
    mime_type: Mapped[str] = mapped_column(String(100), nullable=False)

    uploaded_by: Mapped[UUID] = mapped_column(
        PG_UUID(as_uuid=True),
        ForeignKey("users.id"),
        nullable=False,
    )
