<app>
<div class="columns">
    <div class="column is-two-fifths m-5">
        <choixformation isSelected={isSelected} reset={reset}></choixformation>
    </div>
    
    <div class="column">
      <div class="box p-5 my-5" if={state.statistique!=''}>
        <pourcentageForma statistique={state.statistique} moyenne={state.moyenne} selectivite={state.selectivite} capacite={state.capacite}></pourcentageForma>
        <statistiqueFormation pct_femme={state.pct_femme} repartitionBac={state.pct_Bac} repartitionMention={state.repartitionMention}></statistiqueFormation>
      </div>
      <div class="box p-5 my-5" if={state.statistique!=''}>
        <tableuFormation records={state.statistique.records}></tableuFormation>
      </div>
    </div>
</div>

<script>
  export default function todos() {
    return {
      onBeforeMount(props, state) {
        // initial state
        this.state = {
          statistique: '',
          selectivite: '',
          moyenne: '',
          pct_femme: '',
          pct_Bac: '',
          capacite: '',
          repartitionMention: ''
        };
      },

      async isSelected(detail, type){
        this.getData(detail, type)
      },

      reset(){
        this.update({
          statistique: '',
          selectivite: '',
          moyenne: '',
          pct_femme: '',
          pct_Bac: '',
          capacite: '',
          repartitionMention: ''
        })
      },

      async getData(detail, type){
        if(!localStorage.getItem(`${type}+${detail}`)){
          let rep = await fetch(`https://data.enseignementsup-recherche.gouv.fr/api/records/1.0/search/?dataset=fr-esr-parcoursup&q=&sort=tri&facet=session&facet=contrat_etab&facet=cod_uai&facet=g_ea_lib_vx&facet=dep_lib&facet=region_etab_aff&facet=acad_mies&facet=ville_etab&facet=lib_for_voe_ins&facet=select_form&facet=fili&facet=form_lib_voe_acc&facet=fil_lib_voe_acc&facet=detail_forma&facet=tri&facet=cod_aff_form&facet=etablissement_id_paysage&facet=composante_id_paysage&refine.form_lib_voe_acc=${encodeURIComponent(type)}&refine.fil_lib_voe_acc=${encodeURIComponent(detail)}&timezone=Europe%2FBerlin&rows=10000&refine.sexe=F`);
          rep = await rep.json();

          localStorage.setItem(`${type}+${detail}`, JSON.stringify(rep))
          this.update({
            statistique: rep
          })
        }else{
          this.update({
            statistique: JSON.parse(localStorage.getItem(`${type}+${detail}`))
          })
        }
        this.calcule()
      },


      getSelectivite(records){
        let total = records.length
        let gen = records.reduce(function (accumulateur, valeurCourante) {
            if(valeurCourante.fields.taux_acces_ens){
                return accumulateur + (valeurCourante.fields.taux_acces_ens)
            }else{
                return accumulateur
            }
        }, 0);
        
        this.update({
            selectivite: Math.round(gen/total)
        })
      },

      getMoyenne(records){
        
        let gen = records.reduce(function (accumulateur, valeurCourante) {
          if(valeurCourante.fields.acc_tb){
              accumulateur +=  (valeurCourante.fields.acc_tb*16)
          }
          if(valeurCourante.fields.acc_ab){
              accumulateur += (valeurCourante.fields.acc_ab*12)
          }
          if(valeurCourante.fields.acc_b){
              accumulateur +=  (valeurCourante.fields.acc_b*14)
          }
          if(valeurCourante.fields.acc_tbf){
              accumulateur +=  (valeurCourante.fields.acc_tbf*18)
          }
          if(valeurCourante.fields.sansmention){
              accumulateur += (valeurCourante.fields.sansmention*10)
          }
          if(valeurCourante.fields.acc_mention_nonrenseigne){
              accumulateur += (valeurCourante.fields.acc_mention_nonrenseigne*10)
          }
          return accumulateur;
        }, 0);


        let total = records.reduce(function (accumulateur, valeurCourante) {
          if(valeurCourante.fields.acc_tb){
              accumulateur +=  (valeurCourante.fields.acc_tb)
          }
          if(valeurCourante.fields.acc_ab){
              accumulateur += (valeurCourante.fields.acc_ab)
          }
          if(valeurCourante.fields.acc_b){
              accumulateur +=  (valeurCourante.fields.acc_b)
          }
          if(valeurCourante.fields.acc_tbf){
              accumulateur +=  (valeurCourante.fields.acc_tbf)
          }
          if(valeurCourante.fields.sansmention){
              accumulateur += (valeurCourante.fields.sansmention)
          }
          if(valeurCourante.fields.acc_mention_nonrenseigne){
              accumulateur += (valeurCourante.fields.acc_mention_nonrenseigne)
          }
          return accumulateur;
        }, 0);

        this.update({
            moyenne: (Math.round(gen/total*100))/100
        })
      },

      getPctFemme(records){
        let femme=records.reduce(function (accumulateur, valeurCourante) {
          if(valeurCourante.fields.acc_tot_f){
            //nombre de femme
            accumulateur +=  (valeurCourante.fields.acc_tot_f)
          }

          return accumulateur;
        }, 0);

        let total=records.reduce(function (accumulateur, valeurCourante) {
          if(valeurCourante.fields.acc_tot_f){
            //nombre d'admis
            accumulateur +=  (valeurCourante.fields.acc_tot)
          }

          return accumulateur;
        }, 0);

        this.update({
            pct_femme: Math.round(femme/total*100)
        })
      },

      getRepartitionBac(records){

        let general=records.reduce(function (accumulateur, valeurCourante) {
          if(valeurCourante.fields.acc_bg){
            accumulateur +=  (valeurCourante.fields.acc_bg)
          }
          return accumulateur;
        }, 0);

        let pro=records.reduce(function (accumulateur, valeurCourante) {
          if(valeurCourante.fields.acc_bp){
            accumulateur +=  (valeurCourante.fields.acc_bp)
          }
          return accumulateur;
        }, 0);

        let tecno=records.reduce(function (accumulateur, valeurCourante) {
          if(valeurCourante.fields.acc_bt){
            accumulateur +=  (valeurCourante.fields.acc_bt)
          }
          return accumulateur;
        }, 0);

        let total=records.reduce(function (accumulateur, valeurCourante) {
          if(valeurCourante.fields.acc_neobac){
            accumulateur +=  (valeurCourante.fields.acc_neobac)
          }
          if(valeurCourante.fields.acc_at){
            accumulateur +=  (valeurCourante.fields.acc_at)
          }
          return accumulateur;
        }, 0);

        let autre=total - (general+tecno+pro);

        this.update({
            pct_Bac: new Array(Math.round(general/total*100), Math.round(tecno/total*100), Math.round(pro/total*100), Math.round(autre/total*100))
        })
      },

      getCapacite(records){
        let total=records.reduce(function (accumulateur, valeurCourante) {
          if(valeurCourante.fields.capa_fin){
            accumulateur +=  (valeurCourante.fields.capa_fin)
          }
          return accumulateur;
        }, 0);
        this.update({
          capacite: Math.round(total/records.length)
        })
      },

      getRepartitionMention(records){

        let sans=records.reduce(function (accumulateur, valeurCourante) {
          if(valeurCourante.fields.acc_sansmention){
            accumulateur +=  (valeurCourante.fields.acc_sansmention)
          }
          return accumulateur;
        }, 0);

        let assez=records.reduce(function (accumulateur, valeurCourante) {
          if(valeurCourante.fields.acc_ab){
            accumulateur +=  (valeurCourante.fields.acc_ab)
          }
          return accumulateur;
        }, 0);

        let bien=records.reduce(function (accumulateur, valeurCourante) {
          if(valeurCourante.fields.acc_b){
            accumulateur +=  (valeurCourante.fields.acc_b)
          }
          return accumulateur;
        }, 0);

        let tres=records.reduce(function (accumulateur, valeurCourante) {
          if(valeurCourante.fields.acc_tb){
            accumulateur +=  (valeurCourante.fields.acc_tb)
          }
          return accumulateur;
        }, 0);

        let felicitation=records.reduce(function (accumulateur, valeurCourante) {
          if(valeurCourante.fields.acc_tbf){
            accumulateur +=  (valeurCourante.fields.acc_tbf)
          }
          return accumulateur;
        }, 0);

        let total=sans+assez+bien+tres+felicitation;

        this.update({
            repartitionMention: new Array(Math.round(sans/total*100), Math.round(assez/total*100), Math.round(bien/total*100), Math.round(tres/total*100), Math.round(felicitation/total*100))
        })
      },



      calcule(){
        this.getSelectivite(this.state.statistique.records)
        this.getMoyenne(this.state.statistique.records)
        this.getPctFemme(this.state.statistique.records)
        this.getRepartitionBac(this.state.statistique.records)
        this.getRepartitionMention(this.state.statistique.records)
        this.getCapacite(this.state.statistique.records)
      },

    }
  }

</script>
</app>