package ecoparasite.poisson;

import ecoparasite.input.DataParsing;
import ecoparasite.input.InvalidParsingException;
import ecoparasite.input.RawData;
import ecoparasite.input.RawDataOverflow;

import java.util.HashMap;
import java.util.HashSet;

import static java.lang.Double.valueOf;

/**
 * Hérite de Poisson.
 * Ajoute les fonctions de Parsing liés aux données collectées sur le Merlu.
 */
public class Merlu extends Poisson implements DataParsing {

    /**
     * Construteur d'un merlu
     * @param length Un Wrapper Double representant la longueur/taille du poisson
     * @param infestation Un Wrapper Double representant le taux de parasite du poisson
     */
    public Merlu(String id, Double length, Double infestation) {
        super(id, length, null, infestation);
    }

    /**
     * Implémentation de la fonction parse de DataParsing.
     * Renvoie un tableau de poissons à partir d'un RawData.
     *
     * @param data Notre RawData
     * @param parseTypeId L'ID du type de parsing, ignoré ici.
     * @return Le tableau de poissons.
     * @throws RawDataOverflow Si on a un dépassement de données dans notre RawData.
     */
    public static HashSet<Poisson> parse(RawData data, int parseTypeId) throws RawDataOverflow, InvalidParsingException {
        return Mackerel.parse(data);
    }

    /**
     * Implémentation de la fonction parse de Dataparsing
     * @param data Notre RawData
     * @return tableau des poissons
     * @throws RawDataOverflow Si on a un dépassement des données de notre objet RawData.
     */
    public static HashSet<Poisson> parse(RawData data) throws RawDataOverflow {

        HashMap<String,String> temp = new HashMap<>();

        HashSet<Poisson> fishSet;
        fishSet = new HashSet<>();

        for (int i = 0; i < data.getData().getFirst().size(); i++) {
            temp = data.getEntry(i);
            Poisson newP = new Merlu(temp.get("nom.merlu"),valueOf(temp.get("m.size (mm)")),valueOf(temp.get("number of Anisakis sp L3")));

            fishSet.add(newP);
        }


        return fishSet;
    }
}
