﻿using UnityEngine;
using System.Collections;
// Couche Application du jeu
// Le jeu se termine si l'état du cube est "En Zone de dépôt"
// Post: etatJeu de la Machine à Etats est "Fini"
public class ApplicationTP2 : MonoBehaviour
{
    public enum EtatsJeuEnum { Init, EnCours, Fini };
    public EtatsJeuEnum etatJeu;
    public int MAX_NB_OBJECTS_TP2 = 1; 
    public EtatCubeTP2 cube;

    //--------------------------------------------
 
    void InitTP2()
    {
        etatJeu = EtatsJeuEnum.Init;
    }

    //---------------------------------------------
    // Post: Nombre d'objets en zone de dépôt
    public int NbObjetsEnZoneDepot()
    {
        int nbCubein = 0;

        if (cube.etatCube == EtatCubeTP2.EtatCubeEnum.EnZoneDépôt)
            nbCubein++;

        return nbCubein;
    }

    //---------------------------------------------
    // Post: GameObject sélectionnable le cas échéant, null sinon

    public GameObject CubeSelectionnable()
    {
       if (cube.etatCube == EtatCubeTP2.EtatCubeEnum.Sélectionnable)
           return cube.gameObject;
       
       return null;
    }

    //---------------------------------------------
    // Post: Retourne true ssi les cubes sont tous dans la zone de dépôt
    public bool JeuTermine()
    {
        return (NbObjetsEnZoneDepot() == MAX_NB_OBJECTS_TP2);
    }

    //---------------------------------------------
    // Use this for initialization
    void Awake()
    {
        InitTP2();
    }

    //---------------------------------------------
    // Update is called once per frame
    void Update()
    {
        if (etatJeu == EtatsJeuEnum.Init)
        {
            etatJeu = EtatsJeuEnum.EnCours;
        }
        else if (etatJeu == EtatsJeuEnum.EnCours)
        {
            if (JeuTermine() == true)
            {
                Debug.Log("[Application TP2] Partie terminée en " + Time.time + " secondes");
                
                etatJeu = EtatsJeuEnum.Fini;
            }
        }
    }

    //---------------------------------------------
    public string StrEtatJeu()
    {
        string str = "Etat Jeu: ";

        if (etatJeu == EtatsJeuEnum.EnCours)
            str += "En cours ... " + NbObjetsEnZoneDepot().ToString() +"/"+MAX_NB_OBJECTS_TP2+" cube";
        else if (etatJeu == EtatsJeuEnum.Init)
            str += "Init";
        else if (etatJeu == EtatsJeuEnum.Fini)
            str += "Fini";
        else
        {
            str += "*** INCONNU ***";
        }
        return str;
    }

    //---------------------------------------------
    public int IntEtatJeu()
    {
        int etat_jeu;

        if (etatJeu == EtatsJeuEnum.EnCours)
            etat_jeu = 1;
        else if (etatJeu == EtatsJeuEnum.Init)
            etat_jeu = 2;
        else if (etatJeu == EtatsJeuEnum.Fini)
            etat_jeu = 3;
        else
        {
            etat_jeu = -1;
        }
        return etat_jeu;
    }
}
