package testdata;

import de.accso.flexinale.FlexinaleModulith2ComponentsApplication;
import de.accso.flexinale.backoffice.domain.dao.FilmDao;
import de.accso.flexinale.backoffice.domain.dao.KinoDao;
import de.accso.flexinale.backoffice.domain.dao.VorfuehrungDao;
import de.accso.flexinale.security.infrastructure.persistence.BenutzerDao;
import de.accso.flexinale.common.shared_kernel.DoNotCheckInArchitectureTests;
import de.accso.flexinale.ticketing.domain.dao.KontingentDao;
import de.accso.flexinale.ticketing.domain.dao.TicketDao;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.DirtiesContext;

@SpringBootTest(classes = {FlexinaleModulith2ComponentsApplication.class})
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS)
@DoNotCheckInArchitectureTests
@SuppressWarnings("NewClassNamingConvention")
class AllDatabaseCleaner {

    @Autowired
    private BenutzerDao benutzerDao;

    @Autowired
    private KinoDao kinoDao;

    @Autowired
    private FilmDao filmDao;

    @Autowired
    private VorfuehrungDao vorfuehrungDao;

    @Autowired
    private TicketDao ticketDao;

    @Autowired
    private KontingentDao kontingentDao;

    @Test
    void deleteAllBenutzerAndFilmeAndKinosAndVorfuehrungenAndTicketsAndKontingenteFromDatabase() {
        TicketsAndKontingenteDatabaseCleaner.internal_deleteAllTicketsAndKontingenteFromDatabase(
                ticketDao, kontingentDao);

        FKKsVDatabaseCleaner.internal_deleteAllFilmeAndKinosAndVorfuehrungenFromDatabase(
                kinoDao, filmDao, vorfuehrungDao);

        BenutzerDatabaseCleaner.internal_deleteAllBenutzerFromDatabase(
                benutzerDao);
    }
}
