package sn.ladoum.bergerie.config;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import sn.ladoum.bergerie.entity.Mouton;
import sn.ladoum.bergerie.repository.MoutonRepository;
import sn.ladoum.bergerie.service.MoutonService;

import java.util.List;

/**
 * Remplit le champ numeroIdentification pour tous les moutons qui ont été créés
 * avant l'introduction de ce champ. Exécuté une seule fois au démarrage :
 * une fois tous les moutons remplis, ce runner devient un no-op.
 */
@Component
@RequiredArgsConstructor
@Slf4j
@Order(1)
public class MoutonNumeroBackfill implements CommandLineRunner {

    private final MoutonRepository moutonRepository;

    @Override
    @Transactional
    public void run(String... args) {
        List<Mouton> sansNumero = moutonRepository.findAll().stream()
                .filter(m -> m.getNumeroIdentification() == null || m.getNumeroIdentification().isBlank())
                .toList();

        if (sansNumero.isEmpty()) {
            return;
        }

        log.info("Backfill numeroIdentification : {} mouton(s) à renseigner…", sansNumero.size());
        int ok = 0;
        for (Mouton m : sansNumero) {
            String numero = MoutonService.genererNumero(m.getDateNaissance(), m.getId());
            if (numero != null) {
                m.setNumeroIdentification(numero);
                moutonRepository.save(m);
                ok++;
            }
        }
        log.info("Backfill numeroIdentification : {} mouton(s) mis à jour.", ok);
    }
}
