//Liste des valeurs valides pour le sexe d'un utilisateur
const validSexes = ["h","f","a"];

//Classe pour représenter un avis laissé sur la borne que ce soit par l'interface web ou par un geste
export class Review {
    /**
     * Constructeur
     * @param {Auteur} auteur L'auteur de l'avis
     * @param {Number} note La note principale entre 0 et 10 compris
     * @param {String} source La source de l'avis, doit être une entrée dans la table soruces de la bdd
     * @param {String} commentaire Le commentaire lié a l'avis
     * @param {Object} notesAutre Les notes secondaires laissées, sous la forme d'un object ou les clés sont les labels de chaque notes et les valeurs sont des notes entre 0 et 10 compris
     */
    constructor(auteur, note, source, commentaire=null, notesAutre={}) {
        this.auteur = auteur;
        this.note = note;
        this.source = source;
        this.commentaire = commentaire;
        this.notesAutre = notesAutre;
        
        //On vérifie si toutes les données sont correctes
        if(note < 0 || note > 10) {
            throw new Error("Note principale invalide");
        }
        for(let nom in notesAutre) {
            if(notesAutre[nom] < 0 || notesAutre[nom] > 10) {
                throw new Error("Note " + notesAutre[nom] +"/10 invalide");
            }
        }
    }
}

//Classe qui représente l'auteur d'un avis
export class Auteur {
    /**
     * Constructeur
     * @param {Number} age L'age de l'auteur
     * @param {String} sexe Le sexe de la personne (doit être dans l'array validSexes défini au début de ce fichier)
     */
    constructor(age=null, sexe=null) {
        this.age = age;
        this.sexe = sexe;

        //Verification des données
        if(sexe != undefined && !validSexes.includes(sexe) ) {
            throw new Error("Sexe invalide");
        }
        if(age != undefined && age <= 0) {
            throw new Error("Age invalide");
        }
    }
}