using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;

public class Enemie_Spawn_System : MonoBehaviour
{
    [SerializeField] public int roundCounter = 0; //Kann die Runden im Inspector manuell erhöhen
    [SerializeField] public int roundModifierMax3 = 0; // regelt die schwierigkeit der Anfangsrunden

    public int spawnCounter = 0; // zählt wie viele Enemies gespawnt wurden & sorgt dafür, dass der Shop wieder gespawnt wird
    
    public GameObject Tank; //      <---- Zu spawnende Prefab Einfügen
    public GameObject Standart; //  <---- Zu spawnende Prefab Einfügen  
    public GameObject Kamikaze; //   <---- Zu spawnende Prefab Einfügen   

    public GameObject ShopPrefab;
    public Transform SpawnShop; // Punkt, an welchem der Shop respawnt wird

    public Transform SpawnMitteOben; // Punkt, von dem die Enemies gespawnt werden
    public Transform SpawnMitteUnten; // Punkt, von dem die Enemies gespawnt werden
    public Transform SpawnMitteLinks; // Punkt, von dem die Enemies gespawnt werden
    public Transform SpawnMitteRechts; // Punkt, von dem die Enemies gespawnt werden
    public Transform SpawnLinksUnten; // Punkt, von dem die Enemies gespawnt werden
    public Transform SpawnRechtsUnten; // Punkt, von dem die Enemies gespawnt werden
    public Transform SpawnLinksOben; // Punkt, von dem die Enemies gespawnt werden
    public Transform SpawnRechtsOben; // Punkt, von dem die Enemies gespawnt werden

    public TextMeshProUGUI Round_Counter; //   <---- Kontrolliert die Rundenanzeige
    public TextMeshProUGUI Enemie_Counter; //   <---- Kontrolliert die Anzahlanzeige der Gegner

    private bool canSpawnShop = false;

    private void Start()
    {
        //ShopPrefab = Resources.Load<GameObject>("Shop Prefab");
        canSpawnShop = false;
    }

    private void Update()
    {
        ShopRespawner();
    }

    public void SpawnEnemies()
    {
        if (Tank != null && Standart != null && Kamikaze != null && SpawnMitteOben != null && SpawnMitteUnten != null && SpawnMitteLinks != null && SpawnMitteRechts != null && SpawnLinksUnten != null && SpawnRechtsUnten != null && SpawnLinksOben != null && SpawnRechtsOben != null)
        {
            Destroy(GameObject.FindGameObjectWithTag("Shop Prefab"));
            roundCounter++;
            Round_Counter.text = roundCounter.ToString();

            Instantiate(Standart, SpawnMitteOben.position, SpawnMitteOben.rotation);
            Instantiate(Standart, SpawnMitteUnten.position, SpawnMitteUnten.rotation);
            Instantiate(Kamikaze, SpawnMitteLinks.position, SpawnMitteLinks.rotation);
            Instantiate(Kamikaze, SpawnMitteRechts.position, SpawnMitteRechts.rotation);
            ChangeEnemyCounter(4);


            if (roundCounter == roundModifierMax3) // Special-Runde0
            {
                Instantiate(Kamikaze, SpawnLinksUnten.position, SpawnLinksUnten.rotation);
                Instantiate(Kamikaze, SpawnRechtsUnten.position, SpawnRechtsUnten.rotation);
                Instantiate(Kamikaze, SpawnLinksOben.position, SpawnLinksOben.rotation);
                Instantiate(Kamikaze, SpawnRechtsOben.position, SpawnRechtsOben.rotation);
                ChangeEnemyCounter(4);
            }

            if (roundCounter == roundModifierMax3 * 2) // Special-Runde1 Kamikaze
            {
                Instantiate(Standart, SpawnLinksUnten.position, SpawnLinksUnten.rotation);
                Instantiate(Standart, SpawnRechtsUnten.position, SpawnRechtsUnten.rotation);
                Instantiate(Standart, SpawnLinksOben.position, SpawnLinksOben.rotation);
                Instantiate(Standart, SpawnRechtsOben.position, SpawnRechtsOben.rotation);
                ChangeEnemyCounter(4);
            }

            if (roundCounter == roundModifierMax3 * 3) // Special-Runde2 Standart Enemies & Tanks
            {
                Instantiate(Tank, SpawnLinksUnten.position, SpawnLinksUnten.rotation);
                Instantiate(Tank, SpawnRechtsUnten.position, SpawnRechtsUnten.rotation);
                Instantiate(Tank, SpawnLinksOben.position, SpawnLinksOben.rotation);
                Instantiate(Tank, SpawnRechtsOben.position, SpawnRechtsOben.rotation);
                Instantiate(Standart, SpawnMitteOben.position, SpawnMitteOben.rotation);
                Instantiate(Standart, SpawnMitteUnten.position, SpawnMitteUnten.rotation);
                Instantiate(Standart, SpawnMitteLinks.position, SpawnMitteLinks.rotation);
                Instantiate(Standart, SpawnMitteRechts.position, SpawnMitteRechts.rotation);
                ChangeEnemyCounter(8);
            }

            if (roundCounter >= 20)
            {
                for (int i = 0 + roundCounter - 15; i > 0; i--)
                {
                    Instantiate(Tank, SpawnLinksUnten.position, SpawnLinksUnten.rotation);
                    Instantiate(Tank, SpawnRechtsUnten.position, SpawnRechtsUnten.rotation);
                    Instantiate(Tank, SpawnLinksOben.position, SpawnLinksOben.rotation);
                    Instantiate(Tank, SpawnRechtsOben.position, SpawnRechtsOben.rotation);
                    Instantiate(Standart, SpawnMitteOben.position, SpawnMitteOben.rotation);
                    Instantiate(Standart, SpawnMitteUnten.position, SpawnMitteUnten.rotation);
                    Instantiate(Standart, SpawnMitteLinks.position, SpawnMitteLinks.rotation);
                    Instantiate(Standart, SpawnMitteRechts.position, SpawnMitteRechts.rotation);
                    Instantiate(Kamikaze, SpawnLinksOben.position, SpawnLinksOben.rotation);
                    Instantiate(Kamikaze, SpawnRechtsOben.position, SpawnRechtsOben.rotation);
                    Instantiate(Kamikaze, SpawnMitteOben.position, SpawnMitteOben.rotation);
                    Instantiate(Kamikaze, SpawnMitteUnten.position, SpawnMitteUnten.rotation);
                    ChangeEnemyCounter(12);
                }
            }
        }
    }

    public void ShopRespawner()
    {
        if (spawnCounter <= 0 && ShopPrefab != null && canSpawnShop)
        {
            Instantiate(ShopPrefab, SpawnShop.position, SpawnShop.rotation);
            Debug.Log("Spawned Shop" + roundCounter);
            canSpawnShop = false;
        }
    }

    public void ChangeEnemyCounter(int count)
    {
        spawnCounter += count;
        Enemie_Counter.text = spawnCounter.ToString();
        canSpawnShop = true;
    }
}
