import unittest
import sys
import types
from pathlib import Path


ROOT = Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path:
    sys.path.insert(0, str(ROOT))

fake_config = types.ModuleType("app.core.config")
fake_config.get_ai_config = lambda: {"model": "", "api_key": ""}
fake_config.get_telegram_config = lambda: {"bot_token": "", "chat_id": ""}
sys.modules.setdefault("app.core.config", fake_config)

from app.services.ai_service import _normalize_receipt_amounts


class ReceiptAiAccuracyTests(unittest.TestCase):
    def test_prefers_final_total_over_subtotal_when_labels_exist(self) -> None:
        ocr_text = """
        Invoice Number INV-838120
        Subtotal 125.00
        TOTAL GST 15% 18.75
        TOTAL NZD 143.75
        """
        parsed = {
            "amount_gross": 125.00,
            "gst_amount": 0,
            "amount_net": 0,
            "warnings": [],
        }

        normalized = _normalize_receipt_amounts(ocr_text, parsed)

        self.assertEqual(normalized["amount_gross"], 143.75)
        self.assertEqual(normalized["gst_amount"], 18.75)
        self.assertEqual(normalized["amount_net"], 125.00)
        self.assertIn("Adjusted gross amount to final payable total from OCR labels.", normalized["warnings"])


if __name__ == "__main__":
    unittest.main()
