package ecoparasite.svg;

import ecoparasite.representation.ValeursXY;
import ecoparasite.svg.elements.Element;

import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.UUID;

public class SVGFactory {

    static final private String EXPORT_PATH = "export/";
    static final private String EXTENSION = ".svg";

    /**
     * Permet la création du fichier SVG
     * @param mesElements un array des elements à ajouter dans le svg
     * @return True si la création est un succès, False sinon
     */
    public static boolean createSVG(ArrayList<Element> mesElements){

        String code = createSVGCode(mesElements);

        try {
            createFile(code);
        } catch (Exception e) {
            return false;
        }

        return true;
    }

    /**
     * Permet la création du fichier SVG (Polymorphisme pour ajouter un nom de fichier)
     * @param mesElements un Array des elements à ajouter dans le SVG
     * @param filename une String représentant le nom du fichier choisi
     * @return True si la création est un succès, False sinon
     */
    public static boolean createSVG(ArrayList<Element> mesElements, String filename) {

        String code = createSVGCode(mesElements);

        try {
            createFile(code,filename);
        } catch (Exception e) {
            return false;
        }

        return true;
    }

    /**
     * Fonction basique de transformation des éléments en code SVG
     * @param mesElements un array contenant les éléments à mettre dans le svg
     * @return une String contenant la totalité du code SVG de notre graphique
     */
    public static String createSVGCode(ArrayList<Element> mesElements){

        String code = "<svg height=\"800\" width=\"800\" >";

        for (Element e : mesElements){

            code += e.toSVG();

        }

        code += "</svg>";

        return code;
    }

    /**
     * fonction qui créer le fichier, ici avec une ID random comme nom de fichier
     * @param data une String contenant le contenue du fichier désiré (ici pour le SVG)
     * @throws IOException Déclenché par un échec de la création du fichier
     */
    public static void createFile(String data) throws IOException {
        String id = UUID.randomUUID().toString();
        createFile(data,id);
    }

    /**
     * Permet la création du fichier
     * @param data une String contenant le contenue du fichier désiré
     * @param filename une String contenant le nom du fichier voulu
     * @throws IOException Déclenché par un échec de la création du fichier
     */
    public static void createFile(String data, String filename) throws IOException {

        // create a FileWriter object with the file name
        FileWriter writer = new FileWriter(EXPORT_PATH + filename + EXTENSION);

        // write the string to the file
        writer.write(data);

        // close the writer
        writer.close();

        System.out.println("Successfully wrote text to file.");

    }

}
