from db.catalog_normalization_service import upsert_collection_commerce_profile
from db.location_experience import collection_location_context
from db.location_registry import ensure_default_home_surplus_locations


def test_collection_location_context_resolves_nearest_allowed_location(catalog_intent_session):
    ensure_default_home_surplus_locations(catalog_intent_session)
    upsert_collection_commerce_profile(
        catalog_intent_session,
        payload={
            "collection_name": "Anna Caramel Harvest",
            "category_l1": "Kitchen Cabinets",
            "default_location_code": "1",
            "allow_geolocation": True,
            "allow_manual_selection": True,
            "location_selection_mode": "manual_with_optional_geolocation",
        },
    )
    catalog_intent_session.flush()

    context = collection_location_context(
        catalog_intent_session,
        category_l1="Kitchen Cabinets",
        collection_name="Anna Caramel Harvest",
        user_latitude=39.95,
        user_longitude=-75.12,
    )

    assert context["location_settings"]["default_location_code"] == "1"
    assert context["resolved_location"]["selected_location_code"] == "2"
    assert context["resolved_location"]["selection_strategy"] == "nearest_geolocation"


def test_collection_location_context_falls_back_to_profile_default_when_geo_disabled(catalog_intent_session):
    ensure_default_home_surplus_locations(catalog_intent_session)
    upsert_collection_commerce_profile(
        catalog_intent_session,
        payload={
            "collection_name": "Anna Snow White",
            "category_l1": "Kitchen Cabinets",
            "default_location_code": "12",
            "allow_geolocation": False,
        },
    )
    catalog_intent_session.flush()

    context = collection_location_context(
        catalog_intent_session,
        category_l1="Kitchen Cabinets",
        collection_name="Anna Snow White",
        user_latitude=27.95,
        user_longitude=-82.45,
    )

    assert context["resolved_location"]["selected_location_code"] == "12"
    assert context["resolved_location"]["selection_strategy"] == "default_location"
