# test_core_functionality.py

import pytest
from helpers import extract_numeric_value, get_col_idx
from config import COLUMN_ORDER # Wir brauchen die echte Spaltenreihenfolge für den Test

# --- Testfälle für die kritische Funktion extract_numeric_value ---
# Format: (Input-String, erwarteter Output als String)
umsatz_test_cases = [
    ("ca. 1.234,56 Mio. € (2022)", "1"),       # In Mio, Tausendertrenner ., Komma als Dezimal
    ("rund 500 Tsd. US-Dollar", "0"),          # Tausender wird zu 0.5, gerundet 0
    ("750.000 Euro", "1"),                     # . als Tausendertrenner, wird zu 0.75, gerundet 1
    ("1,5 Milliarden CHF", "1500"),            # Milliarden-Einheit
    ("25.7 mn", "26"),                         # "mn" Abkürzung
    ("keine Angabe", "k.A."),                  # Text
    ("0", "0"),                                # Null-Wert
    ("FEHLERHAFTER WERT", "k.A."),             # Fehler-Fallback
    ("1234567", "1"),                          # Reine Zahl ohne Einheit
    ("€ 850 k", "1"),                          # "k" für Tausend
]

mitarbeiter_test_cases = [
    ("ca. 1.234", "1234"),
    ("rund 500 Tsd.", "500000"),
    ("1,5 Millionen", "1500000"),
    ("1.234 (Stand 2023)", "1234"),
    ("k.A.", "k.A."),
]

@pytest.mark.parametrize("input_str, expected", umsatz_test_cases)
def test_extract_umsatz_from_various_formats(input_str, expected):
    """Prüft, ob `extract_numeric_value` für Umsatz verschiedene Formate korrekt in Millionen umwandelt."""
    assert extract_numeric_value(input_str, is_umsatz=True) == expected

@pytest.mark.parametrize("input_str, expected", mitarbeiter_test_cases)
def test_extract_mitarbeiter_from_various_formats(input_str, expected):
    """Prüft, ob `extract_numeric_value` für Mitarbeiter verschiedene Formate korrekt in absolute Zahlen umwandelt."""
    assert extract_numeric_value(input_str, is_umsatz=False) == expected


# --- Testfälle für die neue, zentrale get_col_idx Funktion ---
def test_get_col_idx_success():
    """Prüft, ob ein gültiger Spaltenname den korrekten Index zurückgibt."""
    # Wir nehmen an, "CRM Name" ist die zweite Spalte laut COLUMN_ORDER
    assert get_col_idx("CRM Name") == 1 
    # Wir nehmen an, "ReEval Flag" ist die erste Spalte
    assert get_col_idx("ReEval Flag") == 0

def test_get_col_idx_failure():
    """Prüft, ob ein ungültiger Spaltenname None zurückgibt."""
    assert get_col_idx("Diese Spalte existiert nicht") is None

def test_get_col_idx_edge_cases():
    """Prüft Randfälle."""
    assert get_col_idx("") is None
    assert get_col_idx(None) is None
    # Letzte Spalte
    last_column_name = COLUMN_ORDER[-1]
    expected_last_index = len(COLUMN_ORDER) - 1
    assert get_col_idx(last_column_name) == expected_last_index