"""Tests for channel attribute value resolution (Magento select/multiselect)."""

from datetime import datetime, timezone

import pytest

from channel.attribute_value_resolver import (
    MagentoAttributeValueResolver,
    norm_option_label,
    requires_remote_value_id,
    resolve_select_value_index,
    resolve_select_value_indices,
)


def test_norm_option_label():
    assert norm_option_label("24") == "24"
    assert norm_option_label(" 24 ") == "24"
    assert norm_option_label("Width  (inches)") == "width (inches)"


def test_requires_remote_value_id_magento():
    assert requires_remote_value_id("select", channel="magento")
    assert requires_remote_value_id("multiselect", channel="magento")
    assert not requires_remote_value_id("text", channel="magento")


def test_resolve_select_value_index_exact_and_fallback():
    opts = {"24": 583, "18": 589}
    assert resolve_select_value_index("24", opts, "width") == 583
    assert resolve_select_value_index(" 24 ", opts, "width") == 583
    assert resolve_select_value_index("no", {}, "gift_message_available") == 0
    assert resolve_select_value_index("missing", opts, "width") is None


def test_resolve_select_value_index_numeric_passthrough():
    opts = {"24": 583}
    assert resolve_select_value_index("583", opts, "width", known_value_indices={583}) == 583


def test_resolve_select_value_indices_multiselect():
    opts = {"red": 10, "blue": 20}
    assert resolve_select_value_indices("red,blue", opts, "color") == [10, 20]


class _FakeRegistry:
    def get_options(self, connection_id: int, code: str, ttl_cutoff: datetime):
        if code == "width":
            return {"12": 100, "15": 101}
        return {}


def test_magento_attribute_value_resolver_select():
    resolver = MagentoAttributeValueResolver(_FakeRegistry())
    ttl = datetime.now(timezone.utc)
    result = resolver.resolve_for_attribute(
        1, "width", "12", frontend_input="select", ttl_cutoff=ttl
    )
    assert result.resolved
    assert result.remote_value == 100

    missing = resolver.resolve_for_attribute(
        1, "width", "99", frontend_input="select", ttl_cutoff=ttl
    )
    assert not missing.resolved
    assert missing.remote_value is None


def test_magento_attribute_value_resolver_text_passthrough():
    resolver = MagentoAttributeValueResolver(_FakeRegistry())
    ttl = datetime.now(timezone.utc)
    result = resolver.resolve_for_attribute(
        1, "cabinet_description", "Some text", frontend_input="textarea", ttl_cutoff=ttl
    )
    assert result.resolved
    assert result.remote_value == "Some text"
