"""Executable offline example: no bank requests or actual money movements."""

from tempfile import TemporaryDirectory
from pathlib import Path
from yeti3_core import Engine
from yeti3_donations import Package


class DemoGateway:
    provider = "yookassa"
    recipient = "demo-only"
    confirmed = False

    def create(self, order_id, amount, details):
        return {"remote_id": order_id, "url": "https://example.org/demo-not-a-payment"}

    def paid(self, remote_id, order_id, amount):
        return self.confirmed


with TemporaryDirectory() as directory:
    gateway = DemoGateway()
    engine = Engine()
    module = engine.register(
        Package(
            database=str(Path(directory) / "donations.sqlite3"),
            gateway=gateway,
            settings=lambda: {"enabled": True},
        )
    )
    engine.boot()
    try:
        order = module.create(
            "demo-owner", "demo-order", "demo-site", "support", 10000, "Демо"
        )
        assert module.total("demo-site", "support") == 0
        gateway.confirmed = True
        assert module.reconcile("demo-owner", "demo-order") is True
        assert module.reconcile("demo-owner", "demo-order") is False
        print(
            "Демо: подтверждено",
            module.total("demo-site", "support"),
            "копеек. Реальных платежей не было.",
        )
    finally:
        engine.shutdown()
