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

public class BarraPinchosSpawner : MonoBehaviour
{
    public GameObject pinchoPrefab; // Prefab del pincho
    public float spawnHeight = 11f; // Altura inicial de la barra de pinchos
    public float spawnIntervalMin = 4.5f; // Tiempo mínimo entre spawns
    public float spawnIntervalMax = 6f; // Tiempo máximo entre spawns

    public int initialPinchos = 5; // Número inicial de pinchos en la barra
    public int maxPinchos = 10; // Máximo número de pinchos
    public int incrementThreshold = 3; // Incremento cada X spawns

    public float speedPinchos = 2;

    private int currentPinchos; // Número actual de pinchos en la barra
    private int spawnCount; // Número de spawns realizados

    void Start()
    {
        float speedPinchos = 2;
        currentPinchos = initialPinchos;
        spawnCount = 0;
        StartCoroutine(SpawnSpikesBar());
    }

    IEnumerator SpawnSpikesBar()
    {
        while (true)
        {
            // Elegir un tiempo aleatorio para el próximo spawn
            float interval = Random.Range(spawnIntervalMin, spawnIntervalMax);

            // Esperar el tiempo seleccionado
            yield return new WaitForSeconds(interval);

            // Crear la barra de pinchos
            SpawnBar();

            // Incrementar el contador de spawns
            spawnCount++;

            // Incrementar el número de pinchos si se alcanza el umbral
            if (spawnCount % incrementThreshold == 0 && currentPinchos < maxPinchos)
            {
                currentPinchos++;
            }
        }
    }

    void SpawnBar()
    {
        int pinchosRandom = Random.Range(currentPinchos - 3, currentPinchos);
        // Elegir una posición aleatoria en el eje X
        float randomX = Random.Range(-3.5f, 3.5f- pinchosRandom * 0.45f);

        // Crear un objeto vacío para contener los pinchos
        GameObject bar = new GameObject("SpikesBar");

        // Configurar la posición y rotación de la barra
        bar.transform.position = new Vector3(randomX, spawnHeight, -1);

        // Generar los pinchos en la barra
        for (int i = 0; i < pinchosRandom; i++)
        {
            Vector3 position = new Vector3(0.5f * i, 0, 0); // Pinchos se generan con un espacio de 0.5 entre ellos
            Instantiate(pinchoPrefab, bar.transform.position + position, Quaternion.Euler(0f, 0f, -180f), bar.transform);
        }

        // Añadir movimiento descendente a la barra
        bar.AddComponent<BarraPinchos>().speed = (currentPinchos/2)+speedPinchos;
    }

    public void UpdateSpeed(float inc) {
        speedPinchos = speedPinchos + inc;
    }
}
