package projet_freyja.math;

import java.io.Serializable;

public class Vecteur implements Serializable{
    //Attributs
    protected String libelle;
    protected String[] valeurs;
    
    //Méthodes
    //****Constructeurs****
    
    public Vecteur(){
        this.libelle = "";
        this.valeurs = null;
    }
    
    public Vecteur(String l, String[] v){
        this.libelle = l;
        this.valeurs = v;
    }
    
    public Vecteur(Vecteur v){
        this.libelle = v.getLibelle(); 
        valeurs = new String[v.getValeurs().length];
        for(int i = 0; i < v.getValeurs().length; i++){
            this.valeurs[i] = v.getElement(i);
        }
    }
    
    //****Setter&Getter****
    
    public String getLibelle() {
        return libelle;
    }

    public String[] getValeurs() {
        return valeurs;
    }

    public void setLibelle(String libelle) {
        this.libelle = libelle;
    }

    public void setValeurs(String[] valeurs) {
        this.valeurs = valeurs;
    }
    
    public String getElement(int i){
        return this.valeurs[i];
    }
    
    public void setElement(int i, String v){
        this.valeurs[i] = v;
    }
    
    //****toString****
    
    @Override
    public String toString() {
        String vec = "(";
        for(int i = 0; i < valeurs.length; i++){
            if(i == 0){
                vec += valeurs[i];
            }
            else{
                vec += ", " + valeurs[i];
            }
        }
        vec += ")";
        return "Vecteur{" + "libelle=" + libelle + ", valeurs=" + vec + '}';
    }
    
    //****Autres méthodes****
    
    public boolean estNul(){ //Test si le vecteur est nul
        boolean b = true;
        for(int i = 0; i < valeurs.length; i++){
            if(valeurs[i].equals(Integer.toString(0))){
                b =  false;
            }
        }
        return b;
    }
    
    public Vecteur multiplierScalaire(String c){
        for(int i = 0; i < valeurs.length; i++){
            if(valeurs[i].equals("")){
                valeurs[i] = "0";
            }
            double res = Double.parseDouble(getElement(i)) * Double.parseDouble(c);
            this.setElement(i, Double.toString(res));
        }
        return this;
    }
    
    public Vecteur soustraire(Vecteur v){
        for(int i = 0; i < valeurs.length; i++){
            if(valeurs[i].equals("")){
                valeurs[i] = "0";
            }
            double res = Double.parseDouble(valeurs[i]) - Double.parseDouble(v.getElement(i));
            this.setElement(i, Double.toString(res)); 
        }
        return this;
    }
    
    public Vecteur additionner(Vecteur v){
        for(int i = 0; i < valeurs.length; i++){
            if(valeurs[i].equals("")){
                valeurs[i] = "0";
            }
            double res = Double.parseDouble(valeurs[i]) + Double.parseDouble(v.getElement(i));
            this.setElement(i, Double.toString(res)); 
        }
        return this;
    }
    
    public Vecteur puissance(int p){
        for(int i = 0; i < valeurs.length; i++){
            if(valeurs[i].equals("")){
                valeurs[i] = "0";
            }
            double res = Math.pow(Double.parseDouble(getElement(i)), p);
            this.setElement(i, Double.toString(res));
        }
        return this;
    }
    
}
