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

import de.accso.flexinale.common.shared_kernel.FlexinaleIllegalStateException;
import de.accso.flexinale.common.shared_kernel.Identifiable;
import de.accso.flexinale.ticketing.domain.dao.KontingentDao;
import de.accso.flexinale.ticketing.domain.model.Kontingent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Optional;

import static de.accso.flexinale.common.shared_kernel.RawWrapper.getRawOrNull;

public class KontingentService {
    private static final Logger LOGGER = LoggerFactory.getLogger(KontingentService.class);

    public KontingentService(final KontingentDao kontingentDao) {
        this.kontingentDao = kontingentDao;
    }

    final KontingentDao kontingentDao;

    public int getRestkontingentOnline(final Identifiable.Id vorfuehrungId) {
        Optional<Kontingent> kontingent = kontingentDao.findByVorfuehrung(vorfuehrungId);
        if (kontingent.isEmpty()) {
            String message = "Kontingent for Vorfuehrung %s could not be found".formatted(vorfuehrungId);
            LOGGER.error(message);
            throw new FlexinaleIllegalStateException(message);
        }

        return getRawOrNull(kontingent.get().getRestKontingentOnline());
    }
}
