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

from uuid import UUID

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

from src.database.base import TenantModel


class ServiceCrewAssignment(TenantModel):
    """Join row linking a service to a crew member (INDL-33/INDL-34).

    Replaces the legacy ``service_staff_assignments`` (which pointed at users).
    Crew members are contact-only roster records, never platform users.
    """

    __tablename__ = "service_crew_assignments"

    __table_args__ = (
        Index("uq_service_crew", "service_id", "crew_member_id", unique=True),
        Index("idx_service_crew_tenant", "tenant_id", "service_id"),
    )

    # Override tenant_id with an explicit FK to accounts.
    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,
    )

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