package ecoparasite.poisson;

import java.util.HashSet;

/**
 * Classe générique pour un individu Poisson.
 * Des types hérités plus précis, notamment pour le parsing sont disponibles dans le même paquet.
 */
public class Poisson{

    private String id;
    private Double length;
    private Double weight;
    private Double infestation;
    protected HashSet<PartiePoisson> fishParts;

    /**
     * Constructeur de l'objet Poisson
     * @param id Une String representant l'espece du poisson
     * @param length Un Wrapper Double representant la longueur/taille du poisson
     * @param weight Un Wrapper Double representant le poids du poisson
     * @param infestation Un Wrapper Double representant le taux de parasite du poisson
     */
    public Poisson(String id, Double length, Double weight, Double infestation){
        this.id = id;
        this.length = length;
        this.weight = weight;
        this.infestation = infestation;
        this.fishParts = null;
    }

    /**
     * Getter de l'attribut Id
     * @return La string de l'attribut Id
     */
    public String getId() {
        return id;
    }

    /**
     * Getter de l'attribut length
     * @return Le Double de l'attribut length
     */
    public Double getLength() {
        return length;
    }

    /**
     * Getter de l'attribut weight
     * @return Le Double de l'attribut weight
     */
    public Double getWeight() {
        return weight;
    }

    /**
     * Getter de l'attribut infestation
     * @return Le Double de l'attribut infestation
     */
    public Double getInfestation() {
        return infestation;
    }

    /**
     * Getter de l'attribut des parties de poisson.
     * @return Le HashSet des parties de poisson.
     */
    public HashSet<PartiePoisson> getFishParts() {
        return fishParts;
    }

    /**
     * Setter de l'attribut infestation
     * @param infestation le Double de la nouvelle valeur de l'infestation
     */
    public void setInfestation(Double infestation) {
        this.infestation = infestation;
    }

    /**
     * Setter de l'attribut length
     * @param length le Double de la nouvelle valeur de la length
     */
    public void setLength(Double length) {
        this.length = length;
    }

    /**
     * Setter de l'attribut des parties de poisson.
     * @param fishParts Un hashset de parties de poisson.
     */
    public void setFishParts(HashSet<PartiePoisson> fishParts) {
        this.fishParts = fishParts;
    }

    /**
     * Permet d'afficher les informations de notre poisson
     * @return La string contenant les informations
     */
    @Override
    public String toString(){
        String result = "[ %5s : %4f mm, %4f g, %4f taux d'infestation ]";
        return String.format(result, this.getClass().getSimpleName(), this.getLength(), this.getWeight(), this.getInfestation() );
    }


}
