"""
Tests for AmountNormalizer

Usage:
    pytest tests/normalize/normalizers/test_amount_normalizer.py -v
"""

import pytest
from shared.normalize.normalizers.amount_normalizer import AmountNormalizer


class TestAmountNormalizer:
    """Test AmountNormalizer functionality"""

    @pytest.fixture
    def normalizer(self):
        """Create normalizer instance for testing"""
        return AmountNormalizer()

    def test_integer_amount(self, normalizer):
        """Integer amount should generate decimal variants"""
        result = normalizer.normalize('114')
        assert '114' in result
        assert '114,00' in result
        assert '114.00' in result

    def test_with_comma_decimal(self, normalizer):
        """Amount with comma decimal should generate dot variant"""
        result = normalizer.normalize('114,00')
        assert '114,00' in result
        assert '114.00' in result
        assert '114' in result

    def test_with_dot_decimal(self, normalizer):
        """Amount with dot decimal should generate comma variant"""
        result = normalizer.normalize('114.00')
        assert '114.00' in result
        assert '114,00' in result

    def test_with_space_thousand_separator(self, normalizer):
        """Amount with space as thousand separator should be normalized"""
        result = normalizer.normalize('1 234,56')
        assert '1234,56' in result
        assert '1234.56' in result

    def test_space_as_decimal_separator(self, normalizer):
        """Space as decimal separator (Swedish format) should be normalized"""
        result = normalizer.normalize('3045 52')
        assert '3045.52' in result
        assert '3045,52' in result
        assert '304552' in result

    def test_us_format(self, normalizer):
        """US format (1,390.00) should generate variants"""
        result = normalizer.normalize('1,390.00')
        assert '1390.00' in result
        assert '1390,00' in result
        assert '1390' in result

    def test_european_format(self, normalizer):
        """European format (1.390,00) should generate variants"""
        result = normalizer.normalize('1.390,00')
        assert '1390.00' in result
        assert '1390,00' in result
        assert '1390' in result

    def test_space_thousand_with_decimal(self, normalizer):
        """Space thousand separator with decimal should be normalized"""
        result = normalizer.normalize('10 571,00')
        assert '10571.00' in result
        assert '10571,00' in result

    def test_removes_currency_symbols(self, normalizer):
        """Currency symbols (kr, SEK) should be removed"""
        result = normalizer.normalize('114 kr')
        assert '114' in result
        assert '114,00' in result

    def test_large_amount_european_format(self, normalizer):
        """Large amount in European format should be handled"""
        result = normalizer.normalize('20.485,00')
        assert '20485.00' in result
        assert '20485,00' in result

    def test_empty_string(self, normalizer):
        """Empty string should return empty list"""
        result = normalizer('')
        assert result == []

    def test_none_value(self, normalizer):
        """None value should return empty list"""
        result = normalizer(None)
        assert result == []

    def test_callable_interface(self, normalizer):
        """Normalizer should be callable via __call__"""
        result = normalizer('1234.56')
        assert '1234.56' in result

    def test_removes_sek_suffix(self, normalizer):
        """SEK suffix should be removed"""
        result = normalizer.normalize('1234 SEK')
        assert '1234' in result

    def test_with_colon_dash_suffix(self, normalizer):
        """Colon-dash suffix should be removed"""
        result = normalizer.normalize('1234:-')
        assert '1234' in result
