EmailExportService.java

package com.archiweb.service;

import com.archiweb.model.User;
import com.archiweb.repository.UserRepository;
import org.springframework.stereotype.Service;

import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

@Service
public class EmailExportService {

    private final UserRepository userRepository;

    public EmailExportService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    /**
     * Exporte les emails "opt-in" pour campagnes marketing.
     * Si le champ optIn n’existe pas encore, on exporte tous les utilisateurs.
     */
    public String exportEmailing() {
        List<User> users = userRepository.findAll();

        String filePath = "export_emailing.csv";

        try (FileWriter writer = new FileWriter(filePath)) {
            writer.write("email\n");

            for (User user : users) {
                // ✅ Sécurité : vérifie si opt-in existe via réflexion
                boolean include = true;
                try {
                    var field = user.getClass().getDeclaredField("optIn");
                    field.setAccessible(true);
                    Object value = field.get(user);
                    if (value instanceof Boolean) {
                        include = (Boolean) value;
                    }
                } catch (NoSuchFieldException ignored) {
                    // Le champ optIn n'existe pas, on inclut par défaut
                }

                if (include && user.getEmail() != null) {
                    writer.write(user.getEmail() + "\n");
                }
            }

        } catch (IOException | IllegalAccessException e) {
            throw new RuntimeException("Erreur lors de l'export emailing", e);
        }

        return filePath;
    }
}