using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class Manager : Singleton<Manager>
{
    public List<Transform> spawnPoints;
    public List<GameObject> bottles;
    GameObject activeBottle;

    public Text startCanvasText;

    public GameObject nicotz;
    public GameObject trash;
    public GameObject Option;

    public GameObject startCanvas;
    public GameObject optionCanvas;

    public Sprite normal, rip, happy, angry;
    public Image optionNicotzimage;

    public GameObject riprendi;
    public GameObject prossimoLivello;
        

    public int puntiPerVincere = 3;
    public int[] punteggio;

    bool iniziare;
    bool vittoria;

    private void Awake()
    {
        OnReload();
    }
    void Start()
    {
        punteggio = new int[bottles.Count];
        StartCoroutine(MainRoutine());
    }

    IEnumerator MainRoutine()
    {
        //il giocatore preme play
        yield return StartCoroutine(StartPhase());

        //Ssi entra nel vivo del gioco
        yield return StartCoroutine(MainPhase());

        optionCanvas.SetActive(true);
        riprendi.SetActive(false);

        if (!vittoria)
        {
            AudioManager.Instance.PlaySconfitta();
            optionNicotzimage.sprite = rip;
            optionCanvas.GetComponentInChildren<Text>().text = "Mi dispiace... \n hai vomitato sul tavolo! \n IO NON POSSO PIU' ENTRARE";
        }
        else
        {
            AudioManager.Instance.PlayVittoria();
            optionNicotzimage.sprite = happy;
            optionCanvas.GetComponentInChildren<Text>().text = "Molto Bravo! \n la prossima volta vedremo come andrà!";
            prossimoLivello.SetActive(true);
        }



    }

    IEnumerator StartPhase()
    {
        //disattivare/attivare quello che serve
        nicotz.SetActive(false);
        trash.SetActive(false);
        Option.SetActive(false);
        startCanvas.SetActive(true);
        optionCanvas.SetActive(false);
        prossimoLivello.SetActive(false);

        startCanvasText.text = "Buon Nicotz devi bere " + puntiPerVincere + " bottiglie di ogni tipo \n se sono troppe buttale nel bidone!";

        // aspettare ok tramite il tasto play
        while (!iniziare)
            yield return null;

        // attivare e attivare quello che serve
        iniziare = (false);
        nicotz.SetActive(true);
        trash.SetActive(true);
        Option.SetActive(true);
        startCanvas.SetActive(false);
        optionCanvas.SetActive(false);
    }

    IEnumerator MainPhase()
    {
        SpawnBottle();
        bool endPhase = false;
        while (!endPhase)
        {
            vittoria = false;
            foreach(var score in punteggio)
            {
                if(score>puntiPerVincere)
                {
                   
                    vittoria = false;
                    endPhase = true;
                    break;

                }
            }

            if (!endPhase)
            {
                foreach (var score in punteggio)
                { 
                    if (score==puntiPerVincere)
                    {
                        vittoria = true;
                        endPhase = true;
                    }
                    else
                    {
                        vittoria = false;
                        endPhase = false;
                        break;
                    }
                }

            }
           
            yield return null;
        }

        



     
    }
    
        
        
        
        
        
        
    public void SpawnBottle()
    {
        if (activeBottle != null)
            Destroy(activeBottle);

        int spawnIndex = Random.Range(0, spawnPoints.Count);
        int bottleIndex = Random.Range(0, bottles.Count);
        activeBottle = Instantiate(bottles[bottleIndex], spawnPoints[spawnIndex]);
    }

    public void StartGame()
    {
        iniziare = true;
    }

    public void Punteggio(int bottleIndex)
    {
        AudioManager.Instance.PlayBevuta();
        punteggio[bottleIndex]++;

       
    }

    public void Pause()
    {
        activeBottle.SetActive(false);
        trash.SetActive(false);
        nicotz.SetActive(false); 
        Option.SetActive(false);
        prossimoLivello.SetActive(false);
        optionCanvas.SetActive(true);

        riprendi.SetActive(true);
        optionNicotzimage.sprite = angry;

        optionCanvas.GetComponentInChildren<Text>().text = "OPZIONI \n MA CHE MOLLI IO VOGLIO CONTINUARE A BERE!!";


    }
    public void Riprendi() 
    {
        activeBottle.SetActive(true);
        trash.SetActive(true);
        nicotz.SetActive(true);
        Option.SetActive(true);
        optionCanvas.SetActive(false);
        
    }

    public void Restart()
    {
        SceneManager.LoadScene(0);
    }

    public void Quit()
    {
        Application.Quit();

    }

    public void ProssimoLivello()
    {
        puntiPerVincere = puntiPerVincere+1;

        optionCanvas.SetActive(false);
        punteggio = new int[bottles.Count];

        StartCoroutine(MainRoutine());
    }


}
