package pl.polskalokalnie.config;

import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.ApplicationArguments;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import pl.polskalokalnie.lead.LeadRepository;
import pl.polskalokalnie.lead.LeadSyncService;
import pl.polskalokalnie.user.UserRepository;

/**
 * Jednorazowy backfill: zakłada leady REGISTERED_USER dla istniejących kont, które ich jeszcze
 * nie mają. Kolejne rejestracje/aktualizacje profilu utrzymują synchronizację na bieżąco.
 * Uruchamia się po SchemaFixer, żeby tabele leadów były już gotowe.
 */
@Component
@Order(100)
public class LeadBackfillRunner implements ApplicationRunner {

    private final UserRepository userRepository;
    private final LeadRepository leadRepository;
    private final LeadSyncService leadSyncService;

    public LeadBackfillRunner(UserRepository userRepository, LeadRepository leadRepository,
            LeadSyncService leadSyncService) {
        this.userRepository = userRepository;
        this.leadRepository = leadRepository;
        this.leadSyncService = leadSyncService;
    }

    @Override
    public void run(ApplicationArguments args) {
        userRepository.findAll().forEach(user -> {
            if (leadRepository.findByUserId(user.getId()).isEmpty()) {
                leadSyncService.syncUser(user);
            }
        });
    }
}
