from __future__ import annotations

from verify_invoice_files import classify_file, rel_from_node_path, xlsx_text, zip_listing_text


def test_classify_invoice_from_ocr_text() -> None:
    result = classify_file(
        "2026.03/2026.03.17-windsurf-Invoice-123.pdf",
        "pdf",
        "Faktura Numer faktury ABC Data wystawienia Sprzedawca Nabywca VAT",
        {"label": "windsurf"},
    )
    assert result["decision"] == "invoice"


def test_classify_regulations_as_no_invoice_even_from_pdf() -> None:
    result = classify_file(
        "2026.03/2026.03.00-ai-tools-Regulamin.pdf",
        "pdf",
        "Regulamin świadczenia usług oraz warunki korzystania",
        {"label": "ai-tools"},
    )
    assert result["decision"] == "no_invoice"


def test_classify_email_inline_image_as_no_invoice() -> None:
    result = classify_file(
        "2026.04/2026.04.00-email-assets-review-image012.png",
        "png",
        "",
        {"label": "email-assets-review"},
    )
    assert result["decision"] == "no_invoice"


def test_classify_email_logo_as_no_invoice() -> None:
    result = classify_file(
        "2026.04/2026.04.00-unknown-review-icon_facebook.png",
        "png",
        "",
        {"label": "unknown-review"},
    )
    assert result["decision"] == "no_invoice"


def test_classify_receipt_as_invoice() -> None:
    result = classify_file(
        "2026.04/2026.04.02-github-github-receipt.pdf",
        "pdf",
        "We received payment for your GitHub subscription VAT total receipt",
        {"label": "github"},
    )
    assert result["decision"] == "invoice"


def test_classify_bank_history_as_no_invoice() -> None:
    result = classify_file(
        "2026.04/2026.04.30-ai-tools-Historia_Operacji_2026-04-30.pdf",
        "pdf",
        "HISTORIA TRANSAKCJI Elektroniczne zestawienie operacji zaksięgowanych",
        {"label": "ai-tools"},
    )
    assert result["decision"] == "no_invoice"


def test_classify_call_listing_as_no_invoice_even_with_rachunek_words() -> None:
    result = classify_file(
        "2026.04/2026.04.25-unknown-review-Wykaz polaczen.xlsx",
        "xlsx",
        "Rachunek szczegółowy za okres Nabywca Suma Wykaz polaczen",
        {"label": "unknown-review"},
    )
    assert result["decision"] == "no_invoice"


def test_classify_month_archive_as_no_invoice() -> None:
    result = classify_file(
        "2026.05/2026.05.00-unknown-review-2026.02.zip",
        "zip",
        "2026.02/bank-alior/Historia_Operacji.pdf 2026.02/koszty/Faktura.pdf",
        {"label": "unknown-review"},
    )
    assert result["decision"] == "no_invoice"


def test_classify_tax_declaration_as_no_invoice() -> None:
    result = classify_file(
        "2026.05/2026.05.00-unknown-review-VAT za 01.2026 Prototypowanie.pdf",
        "pdf",
        "VAT za 01.2026 Prototypowanie",
        {"label": "unknown-review"},
    )
    assert result["decision"] == "no_invoice"


def test_classify_weak_unknown_as_review() -> None:
    result = classify_file("2026.03/2026.03.00-ai-tools-document.pdf", "pdf", "hello", {"label": "ai-tools"})
    assert result["decision"] == "review"


def test_rel_from_node_path() -> None:
    assert rel_from_node_path("/home/tom/Downloads/2026/5/2026.03/a.pdf", "/home/tom/Downloads/2026/5") == (
        "2026.03/a.pdf"
    )


def test_zip_listing_text_handles_bad_zip() -> None:
    assert zip_listing_text(b"not a zip") == ""


def test_xlsx_text_handles_bad_zip() -> None:
    assert xlsx_text(b"not a zip") == ""
