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

from typing import Optional
from uuid import UUID

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

from src.database.base import TenantModel


class SchedulingRunSheetItem(TenantModel):
    """A single ordered run-sheet line for a service (INDL-34).

    Replaces the legacy ``run_sheet_milestones`` JSONB column with a proper
    relational row per milestone so items can be ordered and edited individually.
    """

    __tablename__ = "scheduling_run_sheet_items"

    __table_args__ = (
        Index("idx_run_sheet_service", "service_id", "sort_order"),
    )

    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,
    )

    sort_order: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
    time_label: Mapped[Optional[str]] = mapped_column(String(20), nullable=True)
    details: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
