# app/modules/billing/routes/pages/platform.py """ Billing Platform Page Routes (HTML rendering). Platform (unauthenticated) pages for pricing and signup: - Pricing page - Signup wizard - Signup success """ from fastapi import APIRouter, Depends, Request from fastapi.responses import HTMLResponse from sqlalchemy.orm import Session from app.core.database import get_db from app.modules.billing.models import TIER_LIMITS, TierCode from app.modules.core.utils.page_context import get_platform_context from app.templates_config import templates router = APIRouter() def _get_tiers_data() -> list[dict]: """Build tier data for display in templates.""" tiers = [] for tier_code, limits in TIER_LIMITS.items(): tiers.append( { "code": tier_code.value, "name": limits["name"], "price_monthly": limits["price_monthly_cents"] / 100, "price_annual": (limits["price_annual_cents"] / 100) if limits.get("price_annual_cents") else None, "orders_per_month": limits.get("orders_per_month"), "products_limit": limits.get("products_limit"), "team_members": limits.get("team_members"), "order_history_months": limits.get("order_history_months"), "features": limits.get("features", []), "is_popular": tier_code == TierCode.PROFESSIONAL, "is_enterprise": tier_code == TierCode.ENTERPRISE, } ) return tiers # ============================================================================ # PRICING PAGE # ============================================================================ @router.get("/pricing", response_class=HTMLResponse, name="platform_pricing") async def pricing_page( request: Request, db: Session = Depends(get_db), ): """ Standalone pricing page with detailed tier comparison. """ context = get_platform_context(request, db) context["tiers"] = _get_tiers_data() context["page_title"] = "Pricing" return templates.TemplateResponse( "billing/platform/pricing.html", context, ) # ============================================================================ # SIGNUP WIZARD # ============================================================================ @router.get("/signup", response_class=HTMLResponse, name="platform_signup") async def signup_page( request: Request, tier: str | None = None, annual: bool = False, db: Session = Depends(get_db), ): """ Multi-step signup wizard. Query params: - tier: Pre-selected tier code - annual: Pre-select annual billing """ context = get_platform_context(request, db) context["page_title"] = "Start Your Free Trial" context["selected_tier"] = tier context["is_annual"] = annual context["tiers"] = _get_tiers_data() return templates.TemplateResponse( "billing/platform/signup.html", context, ) @router.get( "/signup/success", response_class=HTMLResponse, name="platform_signup_success" ) async def signup_success_page( request: Request, vendor_code: str | None = None, db: Session = Depends(get_db), ): """ Signup success page. Shown after successful account creation. """ context = get_platform_context(request, db) context["page_title"] = "Welcome to Wizamart!" context["vendor_code"] = vendor_code return templates.TemplateResponse( "billing/platform/signup-success.html", context, )