"""Public plan display rules (Enterprise custom pricing)."""
from datetime import datetime, timezone
from types import SimpleNamespace
from uuid import uuid4

from src.domain.billing.plan_public import (
    subscription_plan_response_for_public,
    subscription_plan_to_public,
)


def _plan(**kwargs):
    defaults = dict(
        id=uuid4(),
        name="X",
        slug="basic",
        description=None,
        is_active=True,
        price_monthly=1000,
        price_yearly=10000,
        currency="usd",
        stripe_product_id=None,
        stripe_monthly_price_id=None,
        stripe_yearly_price_id=None,
        features={},
        limits={},
        sort_order=0,
        trial_days=0,
        includes_metered_billing=False,
        metered_stripe_price_id=None,
        metered_unit_label=None,
        current_monthly_price_version_id=None,
        current_yearly_price_version_id=None,
        current_metered_price_version_id=None,
        created_at=datetime.now(timezone.utc),
        updated_at=datetime.now(timezone.utc),
    )
    defaults.update(kwargs)
    return SimpleNamespace(**defaults)


def test_subscription_plan_to_public_enterprise_hides_prices():
    p = _plan(slug="enterprise", name="Enterprise", price_monthly=20000, price_yearly=None)
    out = subscription_plan_to_public(p)
    assert out.custom_pricing is True
    assert out.price_monthly is None
    assert out.price_yearly is None
    assert out.yearly_price_source is None


def test_subscription_plan_to_public_basic_keeps_prices():
    p = _plan(slug="basic", price_monthly=1900, price_yearly=19000)
    out = subscription_plan_to_public(p)
    assert out.custom_pricing is False
    assert out.price_monthly == 1900
    assert out.price_yearly == 19000
    assert out.yearly_price_source == "catalog"


def test_subscription_plan_to_public_estimates_yearly_when_missing():
    p = _plan(slug="basic", price_monthly=1000, price_yearly=None)
    out = subscription_plan_to_public(p)
    assert out.price_yearly == 12000
    assert out.yearly_price_source == "estimated_monthly_x12"


def test_subscription_plan_response_for_public_enterprise():
    p = _plan(slug="enterprise", price_monthly=20000)
    out = subscription_plan_response_for_public(p)
    assert out.custom_pricing is True
    assert out.price_monthly is None
    assert out.price_yearly is None
    assert out.yearly_price_source is None
