import pytest
from app.modules.invoices.application.invoice_truth.classifier import TruthClassifierMixin

class DummyClassifier(TruthClassifierMixin):
    pass

def test_classify_invoice_business_type_mixed():
    classifier = DummyClassifier()
    res = classifier.classify_invoice_business_type(
        direction="input", 
        items_classification=["WAREHOUSE_MATERIAL", "SUBCONTRACT_SERVICE"]
    )
    assert res["business_category"] == "mixed"
    assert res["business_subcategory"] == "complex_mixed"

def test_classify_invoice_business_type_commercial_input():
    classifier = DummyClassifier()
    res = classifier.classify_invoice_business_type(
        direction="input", 
        items_classification=["WAREHOUSE_MATERIAL"]
    )
    assert res["business_category"] == "commercial"
    assert res["business_subcategory"] == "purchase_in"

    res = classifier.classify_invoice_business_type(
        direction="input", 
        items_classification=["RENTAL_EQUIPMENT"]
    )
    assert res["business_category"] == "commercial"
    assert res["business_subcategory"] == "machine_rental_in"

def test_classify_invoice_business_type_service_input():
    classifier = DummyClassifier()
    res = classifier.classify_invoice_business_type(
        direction="input", 
        items_classification=["SUBCONTRACT_SERVICE"]
    )
    assert res["business_category"] == "service"
    assert res["business_subcategory"] == "construction_work"

def test_classify_invoice_business_type_commercial_output():
    classifier = DummyClassifier()
    res = classifier.classify_invoice_business_type(
        direction="output", 
        items_classification=["WAREHOUSE_MATERIAL"]
    )
    assert res["business_category"] == "commercial"
    assert res["business_subcategory"] == "sales_out"

def test_classify_invoice_business_type_cross_reference_rental():
    classifier = DummyClassifier()
    # Renting out a machine we rented in
    res = classifier.classify_invoice_business_type(
        direction="output", 
        items_classification=["RENTAL_EQUIPMENT"],
        has_rental_input_history=True
    )
    assert res["business_category"] == "commercial"
    assert res["business_subcategory"] == "machine_sublease_out"

    # Renting out our owned machine
    res = classifier.classify_invoice_business_type(
        direction="output", 
        items_classification=["RENTAL_EQUIPMENT"],
        has_rental_input_history=False
    )
    assert res["business_category"] == "service"
    assert res["business_subcategory"] == "equipment_leasing"
