# app/modules/billing/services/platform_pricing_service.py
"""
Platform pricing service.

Handles database operations for subscription tiers and add-on products.
"""

from sqlalchemy.orm import Session

from app.modules.billing.models import (
    AddOnProduct,
    SubscriptionTier,
)


class PlatformPricingService:
    """Service for handling pricing data operations."""

    def get_public_tiers(self, db: Session) -> list[SubscriptionTier]:
        """Get all public subscription tiers from the database."""
        return (
            db.query(SubscriptionTier)
            .filter(
                SubscriptionTier.is_active == True,
                SubscriptionTier.is_public == True,
            )
            .order_by(SubscriptionTier.display_order)
            .all()
        )

    def get_tier_by_code(
        self, db: Session, tier_code: str, platform_id: int | None = None
    ) -> SubscriptionTier | None:
        """Get a specific tier by code from the database, optionally scoped to a platform."""
        query = db.query(SubscriptionTier).filter(
            SubscriptionTier.code == tier_code,
            SubscriptionTier.is_active == True,
        )
        if platform_id is not None:
            query = query.filter(SubscriptionTier.platform_id == platform_id)
        return query.first()

    def get_active_addons(self, db: Session) -> list[AddOnProduct]:
        """Get all active add-on products from the database."""
        return (
            db.query(AddOnProduct)
            .filter(AddOnProduct.is_active == True)
            .order_by(AddOnProduct.category, AddOnProduct.display_order)
            .all()
        )


# Singleton instance
platform_pricing_service = PlatformPricingService()
