import unittest

from app.services.tenant_store import TipsRunPreviewPayload, _resolve_tips_amounts


class TipsAmountsTests(unittest.TestCase):
    def test_total_is_cash_plus_effective_pos(self) -> None:
        payload = TipsRunPreviewPayload(
            cash_amount=100,
            pos_amount=30,
            pos_effective_amount=20,
        )

        self.assertEqual(_resolve_tips_amounts(payload), (120.0, 30.0, 20.0, 100.0))

    def test_gross_pos_can_exceed_the_new_total(self) -> None:
        payload = TipsRunPreviewPayload(
            cash_amount=0,
            pos_amount=30,
            pos_effective_amount=20,
        )

        self.assertEqual(_resolve_tips_amounts(payload), (20.0, 30.0, 20.0, 0.0))

    def test_legacy_total_request_remains_compatible(self) -> None:
        payload = TipsRunPreviewPayload(
            total_amount=100,
            pos_amount=30,
            pos_effective_amount=20,
        )

        self.assertEqual(_resolve_tips_amounts(payload), (90.0, 30.0, 20.0, 70.0))

    def test_effective_pos_cannot_exceed_gross_pos(self) -> None:
        payload = TipsRunPreviewPayload(
            cash_amount=10,
            pos_amount=20,
            pos_effective_amount=21,
        )

        with self.assertRaisesRegex(ValueError, "POS effettive"):
            _resolve_tips_amounts(payload)


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