let score = 0

// stoque les ameliorations deja disponibles dans le magasin pour ne pas le faire clignoter
let magasin_tech = {}

let magasin_coll = {}

// stoquer les ameliorations deja achetees pour ne pas les afficher dans le magasin
let sacado = {}

// premet de ne pas laisser le joueur acheter html 5 si il n'a pas débloqué html 1.0 etc..
let evolution_tech = 0
let evolution_coll = 0

// variable qui permet d'augmenter la taille de l'incrément du score pour chaque clic, en fonction de la technlologie déloquée
let boost = 1

let revenu_passif = 0



async function remplirMagasinTechnologies(){


    const table= document.getElementById("table_magasin_technologies_body") 

    let data = await fetch("../bdd/arbre.json")
    data = await data.json() 


    let tech = data["technologies"]

    for(const key in tech){
        // ne va pas s'embeter à proecess si on a deja acheté l'amelioration
        if(!sacado[key] && !magasin_tech[key]){
            el = tech[key]
            

            
            const tr = document.createElement("tr")
            const case_nom = document.createElement("td")
            case_nom.innerText = el.nom
            const case_boost = document.createElement("td")
            case_boost.innerText = el.boost
            const case_cout = document.createElement("td")
            case_cout.innerText = el.cout
        
            const test  = document.createElement("td")
            const btn_acheter = document.createElement("button")
            
            // stoquage temporaire de la clé JSON correspondant à la technologie à débloquer
            // pour éviter de référencer key, qui va sauter sur sa valeur finale
            let tmp = key
    
    
            let t = new Technologie(tmp)
            // charge les propriétés de la technologie depuis la bdd sans mettre à jour le style directement après
            await t.chargerDepuisBdd(false)
    
            /* fonction qui va s'activer lorsqu'on achète l'objet*/
            btn_acheter.addEventListener("click", (event) =>{


                // ne laisse acheter que si on a l'argent
                if(score >= t.cout){
                    // on améliore le style de la page :)
                    t.appliquerAmeliorationStyle()
                        
                    // et on ajouter l'amélioration dans l'abre des compétences débloquées
                    sacado[key] = true



                    // on refresh le magasin pour enlever l'amelioration de la liste
                    // vide le ventre du magasin
                    table.innerHTML = ""
                    magasin_tech = {}
                    remplirMagasinTechnologies()

                    // finalement, on lui débit son compte de points tel un vendeur de voitures
                    score -= t.cout
                    const score_aff = document.getElementById("score_affichage")
                    score_aff.innerText="SCORE  : " + score

                    // augmentation du boost d'incrément
                    ouvrirAlerte("Incrémentation de la rentabilité de tes clicks de "+t.boost+" points !!")

                    if(t.props.evolution == 0){
                        boost += t.boost -1    // car sinon, le premier boost ne va pas entrainer un nombre rond de points par click :)        

                    }else{
                        boost += t.boost
                    }

                    // incrémente le score implicite d'evolution pour permettre à la prochaine amelioration de s'afficher
                    evolution_tech += 1
                }else{
                    // PAS ASSEZ RICHE !!!!!
                    ouvrirAlerte("PAS ASSEZ RICHE !!!!!!!!!!!!")
                }
                
                
            })
    
            btn_acheter.innerText = "Acheter"
            
            // n'afficher l'amélioration que si le score est assez élevé
            if((t.props.borne <= score) && (evolution_tech === parseInt(t.props.evolution))){
                ouvrirAlerte(tech[key]["narration"])
                // met à jour le contenu du magasin
                // pour ne pas re-afficher cette ligne et éviter un clignotement
                magasin_tech[key] = true

                test.appendChild(btn_acheter)
    
    
                tr.appendChild(case_nom)
                tr.appendChild(case_boost)
                tr.appendChild(case_cout)
                tr.appendChild(test)
                
                table.appendChild(tr)
            }
        }
        

    }

}


async function remplirMagasinCollegues(){


    const table= document.getElementById("table_magasin_collegues_body") 

    let data = await fetch("../bdd/arbre.json")
    data = await data.json() 


    let collegues = data["collegues"]

    for(const key in collegues){
        // ne va pas s'embeter à proecess si on a deja acheté l'amelioration
        if(!sacado[key] && !magasin_coll[key]){
            el = collegues[key]

            // calcul du cout en fonction du nombre de collegue de ce type déjà acheté

            if(key in sacado){
                el.cout = Number(el.cout * (1.1)**sacado[key]).toFixed(1)
            }
            

            const tr = document.createElement("tr")
            const case_nom = document.createElement("td")
            case_nom.innerText = el.nom
            const case_boost = document.createElement("td")
            case_boost.innerText = el.revenu_passif
            const case_cout = document.createElement("td")
            case_cout.innerText = el.cout
            case_cout.id = "case_cout_"+key

            // case contenant un lien vers la page wikipédia du personnage
            const case_wiki = document.createElement("td")
            let a = document.createElement("a")
            a.href = el.wikipedia
            a.innerText = el.nom
            case_wiki.appendChild(a)

        
            const action  = document.createElement("td")
            const btn_acheter = document.createElement("button")
            
            // stoquage temporaire de la clé JSON correspondant à la technologie à débloquer
            // pour éviter de référencer key, qui va sauter sur sa valeur finale
            let tmp = key
    
    
            let c = new Collegue(tmp)
            // charge les propriétés de la technologie depuis la bdd sans mettre à jour le style directement après
            await c.chargerDepuisBdd()
    
            /* fonction qui va s'activer lorsqu'on achète l'objet*/
            btn_acheter.addEventListener("click", (event) =>{


                // ne laisse acheter que si on a l'argent
                if(score >= c.cout){
                



                    // finalement, on lui débit son compte de points tel un vendeur de voitures
                    score -= c.cout
                    const score_aff = document.getElementById("score_affichage")
                    score_aff.innerText="SCORE  : " + score

                    // narration seulement si c'est la première fois qu'on achète
                    if(!(key in sacado)){
                        ouvrirAlerte("Vous avez débloqué "+ c.nom+" !!"+collegues[key]["narration"])
                        ouvrirAlerte("Incrémentation de la rentabilité passive de "+c.revenu_passif+" points !!")
                        // et on ajoute l'amélioration dans l'abre des compétences débloquées
                        sacado[key] = 1
                    }else{
                        // on incrémente la qtt d'objet dans son sacado
                        sacado[key] += 1
                    }

                    // on change le futur cout dans le tableau
                    document.getElementById("case_cout_"+key).innerText = Number(c.cout * (1.1)**sacado[key]).toFixed(1)


                    // augmentation du boost d'incrément
                    revenu_passif += c.revenu_passif

                    // incrémente le score implicite d'evolution pour permettre à la prochaine amelioration de s'afficher
                    evolution_coll += 1
                }else{
                    // PAS ASSEZ RICHE !!!!!
                    ouvrirAlerte("PAS ASSEZ RICHE !!!!!!!!!!!!")
                }
                
                
            })
    
            btn_acheter.innerText = "Acheter"
            
            // n'afficher l'amélioration que si le score est assez élevé
            if(evolution_coll === parseInt(c.props.evolution)){
                // met à jour le contenu du magasin
                // pour ne pas re-afficher cette ligne et éviter un clignotement
                magasin_coll[key] = true

                action.appendChild(btn_acheter)
    
    
                tr.appendChild(case_nom)
                tr.appendChild(case_boost)
                tr.appendChild(case_cout)
                tr.appendChild(case_wiki)
                tr.appendChild(action)
                
                table.appendChild(tr)
            }
        }
        

    }

}


// fonction appelée à chaque clic de souris
function scoreCount(){
    const score_aff = document.getElementById("score_affichage")
    score += boost
    score_aff.innerText="SCORE  : " + Number(score).toFixed(1)

    // check refresh la table magasin pour afficher une amélioration si un palier est atteint
    remplirMagasinTechnologies()
    remplirMagasinCollegues()
}

// revenu passif à chaque seconde

function augmenterScorePassivement(){
    const score_aff = document.getElementById("score_affichage")
    score += revenu_passif
    console.log("nv score : ",score)
    score_aff.innerText="SCORE  : " + Number((score).toFixed(1));

    setTimeout(() => {
        augmenterScorePassivement()
    }, 1000)    
}

