package de.oaa.xxx.dating;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.List;

/**
 * Löscht täglich abgelaufene Dates und deren Interessenten-Einträge.
 * - Dates mit Termin: laufen nach dem Termin ab (expiresAt = scheduledAt)
 * - Dates ohne Termin: laufen 30 Tage nach Erstellung ab (expiresAt = createdAt + 30 Tage)
 */
@Component
public class DatingDateCleanupTask {

    private static final Logger LOGGER = LoggerFactory.getLogger(DatingDateCleanupTask.class);

    private final DatingDateRepository dateRepository;
    private final DatingDateInterestRepository interestRepository;

    public DatingDateCleanupTask(DatingDateRepository dateRepository,
                                  DatingDateInterestRepository interestRepository) {
        this.dateRepository     = dateRepository;
        this.interestRepository = interestRepository;
    }

    @Scheduled(cron = "0 0 3 * * *") // täglich um 03:00 Uhr
    @Transactional
    public void deleteExpiredDates() {
        List<DatingDateEntity> expired = dateRepository.findAllByExpiresAtBefore(LocalDateTime.now());
        if (expired.isEmpty()) return;

        for (DatingDateEntity date : expired) {
            interestRepository.deleteByDateId(date.getDateId());
        }
        dateRepository.deleteAll(expired);
        LOGGER.info("Dating-Cleanup: {} abgelaufene Date(s) gelöscht", expired.size());
    }
}
