import tempfile
import unittest
from pathlib import Path

from pypos.modules.penjualan.models.voucher_model import VoucherModel


class VoucherModelTestCase(unittest.TestCase):
    def test_voucher_create_and_apply_usage(self):
        with tempfile.TemporaryDirectory() as td:
            db_path = str(Path(td) / "voucher_test.db")
            model = VoucherModel(db_path)

            code = "VCRTEST001"
            model.create_voucher(code, 100000, return_id=1, transaksi_id="TRX-A", customer_id="CUST-A")

            voucher = model.get_voucher(code)
            self.assertIsNotNone(voucher)
            self.assertEqual(float(voucher["saldo"]), 100000.0)
            self.assertEqual(str(voucher["status"]).lower(), "aktif")

            ok, saldo_baru = model.apply_usage(code, "TRX-B", 40000)
            self.assertTrue(ok)
            self.assertEqual(float(saldo_baru), 60000.0)

            ok2, msg = model.apply_usage(code, "TRX-C", 70000)
            self.assertFalse(ok2)
            self.assertIn("Saldo voucher tidak mencukupi", str(msg))

            ok3, saldo_akhir = model.apply_usage(code, "TRX-D", 60000)
            self.assertTrue(ok3)
            self.assertEqual(float(saldo_akhir), 0.0)

            voucher_akhir = model.get_voucher(code)
            self.assertIsNotNone(voucher_akhir)
            self.assertEqual(float(voucher_akhir["saldo"]), 0.0)
            self.assertEqual(str(voucher_akhir["status"]).lower(), "habis")


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