from ninja_extra import ControllerBase, api_controller, route
from ninja_extra.exceptions import NotFound

from core.auth.api_permissions import CanView
from counter.models import BillingInfo
from eboutic.models import Basket


@api_controller("/etransaction", permissions=[CanView])
class EtransactionInfoController(ControllerBase):
    @route.get("/data/{basket_id}", url_name="etransaction_data")
    def fetch_etransaction_data(self, basket_id: int):
        """Generate the data to pay an eboutic command with paybox.

        The data is generated with the basket that is used by the current session.
        """
        basket: Basket = self.get_object_or_exception(Basket, pk=basket_id)
        try:
            return dict(basket.get_e_transaction_data())
        except BillingInfo.DoesNotExist as e:
            raise NotFound from e