package projet_freyja.math;

import java.io.Serializable;

public class Base implements Serializable{
    //Attributs
    protected String libelle;
    protected Vecteur[] elements;
    protected int dimension; //Dimension de la famille
    protected int dimVecteur; //Dimension de chaque vecteur
    
    //Methodes
    //****Constructeurs****
    
    Base(){
        this.libelle = "";
        elements = null;
        this.dimension = 0;
        this.dimVecteur = 0;
    }
    
    public Base(String l, Vecteur[] e, int d, int dv){
        //Exception : Tester si e est une famille de vecteurs libres !
        this.libelle = l;
        this.elements = e;
        this.dimension = d;    
        this.dimVecteur = dv;
    }
    
    //****Setter&Getter****
    
    public String getLibelle(){
        return this.libelle;
    }
    
    public void setLibelle(String l){
        this.libelle = l;
    }
    
    public Vecteur[] getElements(){
        return this.elements;
    }
    
    public void setElements(Vecteur[] e){
        //Exception : Tester si e est une famille de vecteurs libres !
        this.elements = e;
    }
    
    public Vecteur getValeur(int i){
        return elements[i];
    }
    
    public void setValeur(int i, Vecteur v){
        this.elements[i] = v;
    }
    
    public int getDimension(){
        return this.dimension;
    }
    
    public void setDimension(int d){
        this.dimension = d;
    }
    
    public int getDimensionVecteur(){
        return this.dimVecteur;
    }
    
    public void setDimensionVecteur(int d){
        this.dimVecteur = d;
    }
    
    //****toString****
    public String familleToString(){
        String vecteurs = "{";
        for (int i = 0; i < elements.length; i++){
            vecteurs += elements[i].toString();
        }
        vecteurs+= "}";
        return vecteurs;
    }
    
    @Override
    public String toString() {
        String vecteurs = "{";
        for (int i = 0; i < elements.length; i++){
            vecteurs += elements[i].toString();
        }
        vecteurs += "}";
        return "Base{" + "libelle=" + libelle + ", elements=" + vecteurs +", "+ "dimension=" + dimension + '}';
    }
    
    //****Autres méthodes****
    
    public boolean estFamilleNulle(Vecteur[] f){ //Test si la famille est uniquement constituée de vecteurs nuls
        int c = 0;
        int l = 0;
        while((l<dimVecteur) && (c<dimension)){ //Tant qu'on a pas parcouru toute la matrice
            for(int i = 0; i < dimension; i++){ 
                for(int j = 0; j < dimVecteur; j++){
                    if(f[i].getElement(j).equals(Double.toString(0))){ //On regarde pour chaque élément s'il y en a un différent de 0
                        return false; //Si c'est le cas elle ne peut pas être nulle
                    }
                }
            }
        c++;
        l++;
        }
        return true;    
    }
      
    public boolean estLibre(){
        return false;
    }
    
    
    
    
}
