"""Public plans endpoint - no auth required.

Lists active subscription plans for the pricing page.
"""
from fastapi import APIRouter, Depends
from sqlalchemy.ext.asyncio import AsyncSession

from src.core.database import get_db
from src.domain.admin.repository import SubscriptionPlanRepository
from src.domain.admin.schemas import SubscriptionPlanResponse
from src.domain.billing.campaign_repository import PricingCampaignRepository
from src.domain.billing.campaign_service import PricingCampaignService
from src.domain.billing.constants import STAFF_PLAN_SLUG
from src.domain.billing.plan_public import subscription_plan_response_for_public

router = APIRouter(prefix="/api/plans", tags=["plans"])


@router.get("", response_model=list[SubscriptionPlanResponse])
async def list_public_plans(db: AsyncSession = Depends(get_db)):
    repo = SubscriptionPlanRepository(db)
    plans = [p for p in await repo.list_all(active_only=True) if p.slug != STAFF_PLAN_SLUG]
    offers = await PricingCampaignService(PricingCampaignRepository(db)).offers_for_plans(plans)
    return [subscription_plan_response_for_public(p, offers.get(p.id)) for p in plans]
