package be.msyben.vinylManager.properties;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * Représentation d'une cotation.
 * @author Mathieu Syben
 */
public class Cotation implements Serializable{
    /**
     * uid
     */
    private static final long serialVersionUID = 454654168432l;
    
    public static final Cotation vide = new Cotation("");
    public static final Cotation S = new Cotation("S");
    public static final Cotation M = new Cotation("M");
    public static final Cotation NM = new Cotation("NM");
    public static final Cotation EX = new Cotation("EX");
    public static final Cotation VG = new Cotation("VG");
    public static final Cotation G = new Cotation("G");
    public static final Cotation F = new Cotation("F");
    public static final Cotation P = new Cotation("P");
    public static final Cotation B = new Cotation("B");
    public static final List<Cotation> cotations;
    static {
        cotations = new ArrayList<>();
        cotations.add(vide);
        cotations.add(S);
        cotations.add(M);
        cotations.add(NM);
        cotations.add(EX);
        cotations.add(VG);
        cotations.add(G);
        cotations.add(F);
        cotations.add(P);
        cotations.add(B);
    }
    
    /**
     * Constructeur
     */
    private Cotation() {
    }

    /**
     * Constructeur
     * @param valeur valeur
     */
    private Cotation(String valeur) {
        this.valeur = valeur;
    }
    /**
     * Holds value of property valeur.
     */
    private String valeur;

    /**
     * Getter for property valeur.
     * @return Value of property valeur.
     */
    public String getValeur() {
        return this.valeur;
    }

    @Override
    public boolean equals(Object o){
        if (o instanceof Cotation){
            Cotation c = (Cotation) o;
            return c.getValeur().equals(this.getValeur());
        }
        if (o instanceof String){
            String s = (String) o;
            return s.equals(this.getValeur());
        }
        return false;
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 17 * hash + (this.valeur != null ? this.valeur.hashCode() : 0);
        return hash;
    }
    
    /**
     * En fonction d'une valeur passée en paramètre, renvoie le string à afficher
     * Si la valeur n'existe pas, valeur est renvoyée. Sinon, renvoie la cotation en String. Ex : Ex renvoie Ex - Excellent    TTB renvoie TTB
     * @param valeur la valeur à rechercher
     * @return le texte à afficher
     */ 
    public static String getCotation(String valeur){
        for (Cotation c : cotations) {
            if (c.equals(valeur)) return c.toString();
        }
        return valeur;
    }
    
    /**
     * extends de to string
     * @return objet sous forme de string
     */
    @Override
    public String toString(){
        if (this == vide) return "";
        return this.getValeur() + " - " + Language.getInstance().get("cotation."+this.getValeur());
    }
    
}
