package de.accso.flexinale.ticketing.application.services;

import de.accso.flexinale.common.shared_kernel.Identifiable;
import de.accso.flexinale.ticketing.domain.services.KontingentService;
import de.accso.flexinale.ticketing_api_contract.api_contract.Ticketing;
import jakarta.transaction.Transactional;

@Transactional
public class TicketService implements Ticketing {

    final de.accso.flexinale.ticketing.domain.services.TicketService ticketService;

    final KontingentService kontingentService;

    public TicketService(final de.accso.flexinale.ticketing.domain.services.TicketService ticketService, final KontingentService kontingentService) {
        this.ticketService = ticketService;
        this.kontingentService = kontingentService;
    }

    @Override
    public void gebeVorfuehrungInDenVerkauf(final Identifiable.Id vorfuehrungId, final int kapazitaet) {
        ticketService.gebeVorfuehrungInDenVerkauf(vorfuehrungId, kapazitaet);
    }

    @Override
    public void loeseGutscheineOnlineFuerVorfuehrungEin(final Identifiable.Id vorfuehrungId, final Identifiable.Id filmId,
                                                        final Identifiable.Id benutzerId,
                                                        final int anzahlGutscheine) {
        ticketService.loeseGutscheineOnlineFuerVorfuehrungEin(vorfuehrungId, filmId, benutzerId, anzahlGutscheine);
    }

    @Override
    public int getRestkontingentOnline(final Identifiable.Id vorfuehrungId) {
        return kontingentService.getRestkontingentOnline(vorfuehrungId);
    }
}
