"""Tests for doc_facts.extract_doc_facts — rule-based number extraction."""
import sys
import os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))

from crews.agromatrix_crew.doc_facts import extract_doc_facts


def test_profit_uah():
    text = "У звіті є прибуток — 5 972 016 грн."
    facts = extract_doc_facts(text)
    assert "profit_uah" in facts, f"Expected profit_uah, got {facts}"
    assert abs(facts["profit_uah"] - 5972016) < 1


def test_fertilizer_uah():
    text = "Загальні витрати на добрива складають 1 521 084 грн на 497 га."
    facts = extract_doc_facts(text)
    assert "fertilizer_uah" in facts, f"Expected fertilizer_uah, got {facts}"
    assert abs(facts["fertilizer_uah"] - 1521084) < 1


def test_area_ha():
    text = "Загальна площа обробки — 497 гектарів."
    facts = extract_doc_facts(text)
    assert "area_ha" in facts, f"Expected area_ha, got {facts}"
    assert abs(facts["area_ha"] - 497) < 0.5


def test_profit_per_ha():
    text = "Прибуток на гектар: 12 016.13 грн/га."
    facts = extract_doc_facts(text)
    assert "profit_uah_per_ha" in facts, f"Expected profit_uah_per_ha, got {facts}"
    assert abs(facts["profit_uah_per_ha"] - 12016.13) < 1


def test_total_cost():
    text = "Загальні витрати на виробництво — 9 684 737 гривень."
    facts = extract_doc_facts(text)
    assert "cost_total_uah" in facts, f"Expected cost_total_uah, got {facts}"
    assert abs(facts["cost_total_uah"] - 9684737) < 1


def test_multiple_facts():
    text = (
        "Площа — 497 га. Прибуток — 5 972 016 грн. "
        "Витрати на добрива 1 521 084 грн. Прибуток: 12 016.13 грн/га."
    )
    facts = extract_doc_facts(text)
    assert "area_ha" in facts
    assert "profit_uah" in facts
    assert "fertilizer_uah" in facts


def test_empty_text():
    assert extract_doc_facts("") == {}
    assert extract_doc_facts(None) == {}


def test_no_numbers():
    facts = extract_doc_facts("Документ містить лише текстовий опис без цифр.")
    assert facts == {}
