<?php

/**
 * Created by PhpStorm.
 * User: phoenix
 * Date: 25/04/16
 * Time: 15:27
 */
class PartieController extends Controller
{
    public function displayStep0()
    {
		session_start();
        if(isset($_SESSION['errMsg'])){
            $this->view->errMsg = $_SESSION['errMsg'];
            unset($_SESSION['errMsg']);
        }

        $this->view->liste = Jeu::getList();
        $this->view->display();
    }

    public function displayStep1()
    {
        session_start();
        if (!isset($_SESSION['jeu_select'])) {
            header("Location:../add_partie");
			die();
		}
        if(isset($_SESSION['errMsg'])){
            $this->view->errMsg = $_SESSION['errMsg'];
            unset($_SESSION['errMsg']);
        }

        if ($_SESSION['jeu_select']->max_joueurs === "")
            $this->view->max = "plus";
        else
            $this->view->max = $_SESSION['jeu_select']->max_joueurs;
        
        $this->view->jeuactuel = $_SESSION['jeu_select'];
        $this->view->listej = Profil::getList();
        $this->view->display();
    }

    public function displayStep2()
    {
        session_start();
        if (!isset($_SESSION['jeu_select'])) {
            header("Location:../add_partie");
			die();
		}
        if (!isset($_SESSION['joueurs_select'])) {
            header("Location:../add_partie/step1");
			die();
		}
        if(isset($_SESSION['errMsg'])){
            $this->view->errMsg = $_SESSION['errMsg'];
            unset($_SESSION['errMsg']);
        }


        $this->view->jeuactuel = $_SESSION['jeu_select'];
        $this->view->listejactuel = $_SESSION['joueurs_select'];
        $this->view->display();
    }

    public function displayStepe1()
    {
        session_start();
        if (!isset($_SESSION['jeu_select']) || !isset($_SESSION['equipes'])) {
            header("Location:../add_partie");
			die();
		}
        if(isset($_SESSION['errMsg'])){
            $this->view->errMsg = $_SESSION['errMsg'];
            unset($_SESSION['errMsg']);
        }
        if (is_null($_SESSION['jeu_select']->max_joueurs)) {
            $this->view->maxj = "plus de";
        }
        else {
            $this->view->maxj = $_SESSION['jeu_select']->max_joueurs;
        }
        if (is_null($_SESSION['jeu_select']->max_equipes)) {
            $this->view->maxe = "plus d'";
        }
        else{
            $this->view->maxe = $_SESSION['jeu_select']->max_equipes." ";
        }
        $this->view->jeuactuel = $_SESSION['jeu_select'];
        $this->view->listej = Profil::getList();
        $this->view->equipes = $_SESSION['equipes'];
        $this->view->display();
    }

    public function displayStepe2()
    {
        session_start();
        if (!isset($_SESSION['jeu_select'])) {
            header("Location:../add_partie");
			die();
		}
        if (!isset($_SESSION['equipes'])) {
            header("Location:../add_partie/stepe1");
			die();
		}
        if(isset($_SESSION['errMsg'])){
            $this->view->errMsg = $_SESSION['errMsg'];
            unset($_SESSION['errMsg']);
        }

        $this->view->jeuactuel = $_SESSION['jeu_select'];
        $this->view->equipes = $_SESSION['equipes'];
        $this->view->display();
    }

    public function displayValid()
    {
        $this->view->display();
    }

    private static function error($errstr, $step){
        session_start();
        $_SESSION['errMsg'] = $errstr;
        if($step == "step0") {
            header("Location:../add_partie");
			die();
        }
        else if($step == "step1") {
            header("Location:step1");
			die();
        }
        else if($step == "step2") {
            header("Location:step2");
			die();
        }
        else if($step == "stepe1") {
            header("Location:stepe1");
			die();
        }
        else if($step == "stepe2") {
            header("Location:stepe2");
			die();
        }
        else {
            header("Location:../add_partie");
			die();
        }
    }

    public static function verifyStep0()
    {

        if (!isset($_POST['jeu'])) {
            //appeler une fonction d'erreur
            self::error("<h1>Erreur : variables absentes</h1>", "step0");
			die();
        }
        $jeu = $_POST['jeu'];

        if (!Jeu::checkExistsNom($jeu)) {
            self::error("<h1>Erreur : le jeu entré est introuvable dans la BD.</h1>", "step0");
			die();
        }

        $jeu = Jeu::getFromNom($jeu);
        session_start();
        $_SESSION['jeu_select'] = $jeu;
        if ($jeu->type == 'equipes') {
            $_SESSION['equipes'] = array(array());
            header('Location:stepe1');
			die();
        } 
		else {
            header('Location:step1');
			die();
		}
    }

    public static function addjoueurs1()
    {
        session_start();
        if (!isset($_SESSION['jeu_select'])) {
            header("Location:../add_partie");
			die();
		}

        $jeu = $_SESSION['jeu_select'];

        if (!isset($_POST["joueur"])) {
            if ($jeu->type == 'equipes') {
                self::error("<h1>Erreur : pas de joueur entré.</h1>", "stepe1");
				die();
			}
            else {
				self::error("<h1>Erreur : pas de joueur entré.</h1>", "step1");
				die();
			}
        }

        $joueur = $_POST["joueur"];

        if (Profil::checkExists($joueur)) {
            $joueur_objet = Profil::getFromSlug($joueur);
        } 
		else {
            if ($jeu->type == 'equipes') {
                self::error("<h1>Erreur : le joueur est introuvable dans la base de données.</h1>", "stepe1");
				die();
            }
			else {
                self::error("<h1>Erreur : le joueur est introuvable dans la base de données.</h1>", "step1");
				die();
            }
        }

        if ($jeu->type == 'equipes') {
            $ke = $_POST['equipejadd'];
            foreach ($_SESSION['equipes'] as $equipe) {
                if (in_array($joueur_objet, $equipe)) {
                    self::error("<h1>Erreur : le joueur a déjà été inscrit pour cette partie.</h1>", "stepe1");
					die();
                }
            }
            array_push($_SESSION['equipes'][$ke], $joueur_objet);
            header("Location:stepe1");
			die();
        } 
		else {
            if (!isset($_SESSION['joueurs_select'])) {
                $_SESSION['joueurs_select'] = array($joueur_objet);
                header("Location:step1");
				die();
            }

            if (!in_array($joueur_objet, $_SESSION['joueurs_select']))
                array_push($_SESSION['joueurs_select'], $joueur_objet);
            else {
                self::error("<h1>Erreur : le joueur a déjà été inscrit pour cette partie.</h1>", "step1");
				die();
            }
            header("Location:step1");
			die();
        }
    }

    public static function clearstep1()
    {
        session_start();
        if (!isset($_SESSION['jeu_select'])) {
            header("Location:../add_partie");
			die();
		}
        $jeu_actuel = $_SESSION['jeu_select'];
        if ($jeu_actuel->type == 'equipes') {
            if (!isset($_SESSION['equipes'])) {
                header("Location:stepe1");
				die();
			}
            $_SESSION['equipes'] = array(array());
            header("Location:stepe1");
			die();
        } 
		else {
            if (!isset($_SESSION['joueurs_select'])) {
                header("Location:step1");
				die();
			}
            unset($_SESSION['joueurs_select']);
            header("Location:step1");
			die();
        }
    }

    public static function deljoueurs1()
    {
        session_start();
        if (!isset($_SESSION['jeu_select'])) {
            header("Location:../add_partie");
			die();
		}

        if ($_SESSION['jeu_select']->type == 'duels') {
            if (!isset($_SESSION['joueurs_select'])) {
                header("Location:step1");
				die();
			}
        }
        if ($_SESSION['jeu_select']->type == 'equipes') {
            if (!isset($_SESSION['equipes'])) {
                header("Location:stepe1");
				die();
			}
        }

        if (!isset($_POST['joueurdel'])) {
            if ($_SESSION['jeu_select']->type == 'equipes') {
				self::error("<h1>Erreur : variables manquantes.</h1>", "stepe1");
				die();
            }
			else {
                self::error("<h1>Erreur : variables manquantes.</h1>", "step1");
				die();
			}
        }

        if ($_SESSION['jeu_select']->type == 'equipes') {
            unset($_SESSION['equipes'][$_POST['equipejdel']][$_POST['joueurdel']]);
            $equipe_tmp = array();
            foreach ($_SESSION['equipes'][$_POST['equipejdel']] as $j) {
                array_push($equipe_tmp, $j);
			}
            $_SESSION['equipes'][$_POST['equipejdel']] = $equipe_tmp;
            header("Location:stepe1");
			die();
        } 
		else {
            unset($_SESSION['joueurs_select'][$_POST['joueurdel']]);
            $joueurs_tmp = array();
            foreach ($_SESSION['joueurs_select'] as $j) {
                array_push($joueurs_tmp, $j);
			}
            $_SESSION['joueurs_select'] = $joueurs_tmp;
            header("Location:step1");
			die();
        }
    }

    public static function delequipe()
    {
        session_start();
        if (!isset($_SESSION['jeu_select'])) {
            header("Location:../add_partie");
			die();
		}
        if (!isset($_SESSION['equipes'])) {
            header("Location:stepe1");
			die();
		}
        if (count($_SESSION['equipes']) <= 1) {
            self::error("<h1>Erreur : vous ne pouvez pas supprimer la seule équipe restante.</h1>", "stepe1");
			die();
        }

        if (!isset($_POST['equipe'])) {
            self::error("<h1>Erreur : variables manquantes.</h1>", "stepe1");
			die();
        }

        unset($_SESSION['equipes'][$_POST['equipe']]);
        $equipe_tmp = array();
        foreach ($_SESSION['equipes'] as $e) {
            array_push($equipe_tmp, $e);
		}
        $_SESSION['equipes'] = $equipe_tmp;
        header("Location:stepe1");
		die();
    }

    public static function addequipe()
    {
        session_start();
        if (!isset($_SESSION['jeu_select'])) {
            header("Location:../add_partie");
			die();
		}
        if (count($_SESSION['equipes']) == $_SESSION['jeu_select']->max_equipes) {
            self::error("<h1>Erreur : vous ne pouvez pas créer d'équipe supplémentaire.</h1>", "stepe1");
			die();
        }

        array_push($_SESSION['equipes'], array());
        header("Location:stepe1");
		die();
    }

    public static function verifyStep1()
    {
        session_start();
        if (!isset($_SESSION['jeu_select'])) {
            header("Location:../add_partie");
			die();
		}
        $jeu_actuel = $_SESSION['jeu_select'];
        if ($jeu_actuel->type == 'equipes') {
            if (!isset($_SESSION['equipes'])) {
                header("Location:stepe1");
				die();
			}
            $equipes = $_SESSION['equipes'];
            if (count($equipes) < $jeu_actuel->min_equipes) {
                self::error("<h1>Erreur : il n'y a pas assez d'équipes.</h1>", "stepe1");
				die();
            }
            if (count($equipes) > $jeu_actuel->max_equipes) {
                self::error("<h1>Erreur : il y a trop d'équipes.</h1>", "stepe1");
				die();
            }

            foreach ($equipes as $ke => $e) {
                if (count($e) < $jeu_actuel->min_joueurs) {
                    $ke = $ke + 1;
                    self::error("<h1>Erreur : il n'y a pas assez de joueurs dans l'équipe $ke.</h1>", "stepe1");
					die();
                }
                if (!is_null($jeu_actuel->max_joueurs)) {
                    if (count($e) > $jeu_actuel->max_joueurs) {
                        $ke = $ke + 1;
                        self::error("<h1>Erreur : il y a trop de joueurs dans l'équipe $ke.</h1>", "stepe1");
						die();
                    }
                }
            }

            header("Location:stepe2");
			die();
        }
		else {
            if (!isset($_SESSION['joueurs_select'])) {
                header("Location:step1");
				die();
			}
            $joueurs = $_SESSION['joueurs_select'];
            if (count($joueurs) < $jeu_actuel->min_joueurs) {
                self::error("<h1>Erreur : il n'y a pas assez de joueurs.</h1>", "step1");
				die();
            }
            if (count($joueurs) > $jeu_actuel->max_joueurs) {
                self::error("<h1>Erreur : il y a trop de joueurs.</h1>", "step1");
				die();
            }
            header('Location:step2');
			die();
        }
    }


    public function verifyStep2()
    {
        session_start();
        if (!isset($_SESSION['jeu_select'])) {
            self::error("<h1>Erreur : le jeu doit être renseigné.</h1>", "step0");
			die();
		}

        $jeu = $_SESSION['jeu_select'];
        if ($jeu->type == 'equipes') {
            if (!isset($_SESSION['equipes']))
                header("Location:stepe1");
				die();
        } 
		else {
            if (!isset($_SESSION['joueurs_select'])) {
                header("Location:../add_partie/step1");
				die();
			}
        }

        if (!isset($_POST['scores'])) {
            if ($jeu->type == 'equipes') {
                self::error("<h1>Erreur : variables absentes</h1>", "stepe2");
				die();
			}
            else {
                self::error("<h1>Erreur : variables absentes</h1>", "step2");
				die();
			}
        }


        $scores = $_POST["scores"];
        foreach ($scores as $s) {
            if (!is_numeric($s)) {
                if ($jeu->type == 'equipes') {
                    self::error("<h1>Erreur : les scores doivent être des nombres.</h1>", "stepe2");
					die();
				}
                else {
                    self::error("<h1>Erreur : les scores doivent être des nombres.</h1>", "step2");
					die();
				}
            }
        }
        if ($jeu->type == 'equipes') {
            $equipes = $_SESSION['equipes'];
            $ns = count($scores);
            $nj = count($equipes);
            if ($ns != $nj) {
                self::error("<h1>Erreur : scores et joueurs incohérents</h1>", "stepe2");
				die();
            }

            $pb = Partie::addPartie($equipes, $scores, $jeu);
            if (!$pb) {
                unset($_SESSION['equipes']);
                unset($_SESSION['jeu_select']);
                header('Location:valid'); // Redirection vers la page OK
				die();
            }
            switch ($pb) {
                case 2:
                    self::error("<h1>Erreur de connexion à la BD.</h1>", "stepe2");
					die();
                    break;
                default:
                    self::error("<h1>Erreur non gérée.</h1>", "stepe2");
					die();
                    break;
            }
        } 
		else {
            $joueurs = $_SESSION['joueurs_select'];
            $ns = count($scores);
            $nj = count($joueurs);
            if ($ns != $nj) {
                self::error("<h1>Erreur : scores et joueurs incohérents</h1>", "step2");
				die();
            }
            $pb = Partie::addPartie($joueurs, $scores, $jeu);
            if (!$pb) {
                unset($_SESSION['jeu_select']);
                unset($_SESSION['joueurs_select']);
                //self::error("<h1>DEBUGGING</h1>", "step2");
				//die();
                header('Location:valid'); // Redirection vers la page OK
				die();
            }
            switch ($pb) {
                case 2:
                    self::error("<h1>Erreur de connexion à la BD.</h1>", "step2");
					die();
                    break;
                default:
                    self::error("<h1>Erreur non gérée.</h1>", "step2");
					die();
                    break;
            }
        }
    }
}