package ecoparasite.population;

/**
 * Permet de stocker les paramètres d'une population pour une année spécifique.
 * Par convention, si on est sur le total, on mettra comme année 0.
 */
public class PopulationArgs {

    /**
     * Année de référence pour ces paramètres.
     */
    private int year;

    /**
     * Le nombre d'individus analysés.
     */
    private int number;
    private PopulationArgInterval length;
    private PopulationArgInterval width;
    private PopulationArgInterval prevalence;
    private PopulationArgInterval ic;
    private Double intensity;
    private Double abondance;

    /*
        Champs pour l'évaluation.
     */

    private String zone;

    /**
     * Constructeur.
     * Toutes les données peuvent être préremplis dans ce constructeur sauf l'année.
     * L'année sera par défaut à zéro.
     *
     * @param N
     * @param length
     * @param width
     * @param prevalence
     * @param ic
     * @param intensity
     * @param abondance
     */
    public PopulationArgs(
            int N,
            PopulationArgInterval length,
            PopulationArgInterval width,
            PopulationArgInterval prevalence,
            PopulationArgInterval ic,
            Double intensity,
            Double abondance
    ){
        this.year = 0;
        this.number = N;
        this.length = length;
        this.width = width;
        this.prevalence = prevalence;
        this.ic = ic;
        this.intensity = intensity;
        this.abondance = abondance;
    }

    /**
     * Constructeur.
     * Toutes les données ainsi que l'année peuvent être préremplis.
     *
     * @param year
     * @param N
     * @param length
     * @param width
     * @param prevalence
     * @param ic
     * @param intensity
     * @param abondance
     */
    public PopulationArgs(
            int year,
            int N,
            PopulationArgInterval length,
            PopulationArgInterval width,
            PopulationArgInterval prevalence,
            PopulationArgInterval ic,
            Double intensity,
            Double abondance
    ){
        this.year = year;
        this.number = N;
        this.length = length;
        this.width = width;
        this.prevalence = prevalence;
        this.ic = ic;
        this.intensity = intensity;
        this.abondance = abondance;
    }

    /**
     * Constructeur.
     * Permet de remplir tout d'abord l'année, les autres paramètres seront remplis par les setters.
     *
     * @param year
     */
    public PopulationArgs(
            int year
    ){
        this.year = year;
    }

    /**
     * Constructeur.
     * Initialise l'objet avec une année par défaut (0).
     */
    public PopulationArgs(){
        this.year = 0;
    }

    /*
      GETTERS / SETTERS
     */

    public int getYear() {
        return year;
    }

    public int getNumber() {
        return number;
    }

    public PopulationArgInterval getLength() {
        return length;
    }

    public PopulationArgInterval getWidth() {
        return width;
    }

    public PopulationArgInterval getPrevalence() {
        return prevalence;
    }

    public PopulationArgInterval getIc() {
        return ic;
    }

    public Double getIntensity() {
        return intensity;
    }

    public Double getAbondance() {
        return abondance;
    }

    public String getZone() { return zone; }

    public void setNumber(int number) {
        this.number = number;
    }

    public void setLength(PopulationArgInterval length) {
        this.length = length;
    }

    public void setWidth(PopulationArgInterval width) {
        this.width = width;
    }

    public void setPrevalence(PopulationArgInterval prevalence) {
        this.prevalence = prevalence;
    }

    public void setIc(PopulationArgInterval ic) {
        this.ic = ic;
    }

    public void setIntensity(Double intensity) {
        this.intensity = intensity;
    }

    public void setAbondance(Double abondance) {
        this.abondance = abondance;
    }

    public void setZone(String zone) { this.zone = zone; }


    @Override
    public String toString(){
        return String.format( "Année: %d, N: %d, Length: %f, Width: %f, Prevalence: %f, IC: %f, Intensity: %f, Abondance: %f, Zone: %s",
              this.year,
              this.number,
              this.length != null ? this.length.transformToDouble() : null,
              this.width != null ? this.width.transformToDouble() : null,
              this.prevalence != null ? this.prevalence.transformToDouble() : null,
              this.ic != null ?  this.ic.transformToDouble() : null,
              this.intensity,
              this.abondance,
              this.zone
        );
    }


}
