from __future__ import annotations
from typing import TYPE_CHECKING
from sqlalchemy import Boolean, ForeignKey, Integer, String, UniqueConstraint
from sqlalchemy.orm import Mapped, mapped_column, relationship
from src.apps.base.models.base import Base

if TYPE_CHECKING:
    from src.apps.feature_control.models.feature_plan import FeaturePlan
    from src.apps.feature_control.models.feature_flag import FeatureFlag


class FeaturePlanItem(Base):
    __tablename__ = "feature_plan_items"

    id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
    plan_id: Mapped[int] = mapped_column(
        Integer, ForeignKey("feature_plans.id", ondelete="CASCADE"), nullable=False, index=True
    )
    feature_slug: Mapped[str] = mapped_column(
        String(100), ForeignKey("feature_flags.slug"), nullable=False, index=True
    )
    is_enabled: Mapped[bool] = mapped_column(Boolean, nullable=False, default=True)

    __table_args__ = (
        UniqueConstraint("plan_id", "feature_slug", name="uq_feature_plan_item"),
    )

    plan: Mapped["FeaturePlan"] = relationship("FeaturePlan", back_populates="items")
    feature: Mapped["FeatureFlag"] = relationship("FeatureFlag")
