package fyloz.trial.ColorRecipesExplorer;

import fyloz.trial.ColorRecipesExplorer.core.io.FileHandler;
import fyloz.trial.ColorRecipesExplorer.web.StringBank;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.List;

@SpringBootApplication
public class ColorRecipesExplorerApplication {

    public static final Logger logger = LoggerFactory.getLogger(ColorRecipesExplorerApplication.class);
    // Chemin du fichier contenant les utilisateurs
    public static final String USERS_FILE_NAME = "passwords";

    public static void main(String[] args) {
        logger.info("Le fichier des utilisateurs se situe à: " + new File(StringBank.UPLOAD_LOCATION + "/" + USERS_FILE_NAME).getAbsolutePath());
        loadPasswords();

        SpringApplication.run(ColorRecipesExplorerApplication.class, args);
    }

    /**
     * Charge les mots de passes contenus dans le fichier.
     * <p>
     * Un mot de passe correspond à une ligne dans le fichier passwords.txt.
     *
     * @throws IOException
     */
    private static void loadPasswords() {
        FileHandler fileHandler = new FileHandler(USERS_FILE_NAME, FileHandler.FileContext.OTHERS, FileHandler.FileExtension.TXT);
        if (!fileHandler.isValid()) {
            fileHandler.createFile();
        }

        try {
            List<String> fileContent = Files.readAllLines(fileHandler.getPath());

            if (fileContent.size() < 1) {
                logger.warn("Aucun mot de passe trouvé. Il sera impossible d'utiliser certaines fonctionnalitées de l'application.");
            }

            for (String line : fileContent) {
                PasswordValidator.addPassword(line);
            }
        } catch (IOException e) {
            logger.error("Une erreur est survenue lors du chargement du fichier des utilisateurs", e);
            logger.warn("Il sera impossible d'utiliser certaines fonctionnalitées de l'application.");
        }
    }
}
