// Use this for initialization
    void Start()
    {
        Map         = GameObject.Find("Map");
        Explication = GameObject.Find("Explication");
        Explication.SetActive(false);
        ExpLogReg = GameObject.Find("ExpLogReg");
        ExpLogReg.SetActive(false);
        question = GameObject.Find("Question");
        question.SetActive(false);

        DDAModelManager.setDDAAlgorithm(DDAModel.DDAAlgorithm.DDA_PMDELTA);
        DDAModelManager.setPlayerId("MonSuperJoueur");
        GameObject pm = GameObject.Find("PlayerManager");

        if (pm)
        {
            DDAModelManager.setPlayerId(pm.GetComponent <PlayerManager>().PlayerName);
            DDAModelManager.setPlayerAge(pm.GetComponent <PlayerManager>().PlayerAge);
            DDAModelManager.setPlayerGender(pm.GetComponent <PlayerManager>().PlayerGender);
        }

        DDAModelManager.setChallengeId("Tank");
        destroyLevel();

        //Premier niveau
        lastDiffParams = DDAModelManager.computeNewDiffParams();
        nextDifficulty = (float)lastDiffParams.Theta;
        createLevel(nextDifficulty);

        foreach (Button b in question.GetComponentsInChildren <Button>())
        {
            b.onClick.AddListener(delegate { ClickButton(b); });
        }
        Button BValider = Explication.GetComponentInChildren <Button>();

        BValider.onClick.AddListener(delegate { ClickButton(BValider); });

        Button BValider2 = ExpLogReg.GetComponentInChildren <Button>();

        BValider2.onClick.AddListener(delegate { ClickButton(BValider2); });

        Score = 0;
    }
    // Update is called once per frame
    void Update()
    {
        if (waitingForNewLevel)
        {
            return;
        }

        bool end     = false;
        bool alldead = false;

        if (player == null || !player.gameObject.activeSelf)
        {
            end = true;
        }
        else
        {
            alldead = true;
            for (int i = 0; i < ennemies.Length; i++)
            {
                if (ennemies[i].gameObject.activeSelf)
                {
                    alldead = false;
                }
            }
            if (alldead)
            {
                end = true;
            }
        }



        /**
         * Fin de niveau !!! on log tout ici
         * */
        if (end)
        {
            if (alldead && player.gameObject.activeSelf)
            {
                win = true;
            }
            if (win)
            {
                TWin.enabled = true;
            }
            else
            {
                TFail.enabled = true;
            }

            destroyLevel();



            if (!logged)
            {
                ask = true;
                if (numLevel >= NbLevelTuto - 1 && !explained)
                {
                    StartCoroutine("explication");
                }
                if (numLevel > NbLevelTuto && numLevel < NbLevelRandom)
                {
                    DDAModelManager.setDDAAlgorithm(DDAModel.DDAAlgorithm.DDA_RANDOM_LOGREG);
                }


                if (win)
                {
                    Score++;
                }
                double[] betas = new double[2];
                if (lastDiffParams.Betas != null && lastDiffParams.Betas.Length > 0)
                {
                    betas = lastDiffParams.Betas;
                }
                if (DDAModelManager.getDDAAlgorithm() == DDAModel.DDAAlgorithm.DDA_LOGREG || DDAModelManager.getDDAAlgorithm() == DDAModel.DDAAlgorithm.DDA_PMDELTA || (DDAModelManager.getDDAAlgorithm() == DDAModel.DDAAlgorithm.DDA_RANDOM_LOGREG && firstLevel))
                {
                    this.log(DDAModelManager.getPlayerId(),
                             betas[0],
                             betas[1],
                             lastDiffParams.LRAccuracy,
                             lastDiffParams.LogRegError.ToString(),
                             lastDiffParams.AlgorithmActuallyUsed.ToString(),
                             (float)lastDiffParams.TargetDiff,
                             (float)lastDiffParams.Theta,
                             win,
                             answer,
                             DDAModelManager.getPlayerAge(),
                             DDAModelManager.getPlayerGender());
                }

                logged = true;



                double[] vars = new double[1];
                vars[0] = nextDifficulty;
                DDADataManager.Attempt lastAttempt = new DDADataManager.Attempt();
                if (win)
                {
                    lastAttempt.Result = 1;
                }
                else
                {
                    lastAttempt.Result = 0;
                }
                lastAttempt.Thetas = vars;
                DDAModelManager.addLastAttempt(lastAttempt);
            }


            if (DDAModelManager.getDDAAlgorithm() == DDAModel.DDAAlgorithm.DDA_PMDELTA && !explaining)
            {
                lastDiffParams = DDAModelManager.computeNewDiffParams();
                nextDifficulty = (float)lastDiffParams.Theta;
                numLevel++;
                StartCoroutine("nextLevel");
            }
            if (DDAModelManager.getDDAAlgorithm() == DDAModel.DDAAlgorithm.DDA_RANDOM_LOGREG && !explaining)
            {
                if (!firstLevel)
                {
                    if (ask)
                    {
                        ask = false;
                        StartCoroutine("deuxSecTimer");
                    }
                    if (questionAnswered)
                    {
                        double[] betas = new double[2];
                        if (lastDiffParams.Betas != null && lastDiffParams.Betas.Length > 0)
                        {
                            betas = lastDiffParams.Betas;
                        }
                        this.log(DDAModelManager.getPlayerId(),
                                 betas[0],
                                 betas[1],
                                 lastDiffParams.LRAccuracy,
                                 lastDiffParams.LogRegError.ToString(),
                                 lastDiffParams.AlgorithmActuallyUsed.ToString(),
                                 (float)lastDiffParams.TargetDiff,
                                 (float)lastDiffParams.Theta,
                                 win,
                                 answer,
                                 DDAModelManager.getPlayerAge(),
                                 DDAModelManager.getPlayerGender());

                        lastDiffParams = DDAModelManager.computeNewDiffParams();
                        nextDifficulty = (float)lastDiffParams.Theta;
                        numLevel++;
                        if (numLevel > NbLevelRandom)
                        {
                            if (!expLogReg)
                            {
                                StartCoroutine("explicationLogReg");
                            }
                            DDAModelManager.setDDAAlgorithm(DDAModel.DDAAlgorithm.DDA_LOGREG);
                            answer = -10;
                        }
                        else
                        {
                            StartCoroutine("nextLevel");
                        }
                    }
                }
                else
                {
                    firstLevel     = false;
                    lastDiffParams = DDAModelManager.computeNewDiffParams();
                    nextDifficulty = (float)lastDiffParams.Theta;
                    numLevel++;
                }
            }
            if (DDAModelManager.getDDAAlgorithm() == DDAModel.DDAAlgorithm.DDA_LOGREG && !explaining)
            {
                lastDiffParams = DDAModelManager.computeNewDiffParams(DifficultyCurve.getDifficulty(numLevelLogReg));//0.2 0.5 0.7
                nextDifficulty = (float)lastDiffParams.Theta;;
                numLevel++;
                numLevelLogReg++;
                StartCoroutine("nextLevel");
            }

            if (numLevel >= 100)
            {
                SceneManager.LoadScene(2);
            }
        }
    }