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

public class spawn2 : MonoBehaviour
{

    public GameObject[] objectToSpawn;
    public GameObject Money;

    public bool spawn = true;
    public float spawnTime = .2f;
    public float percentMoney = .1f;
    public float percentDoubleSpawn = .5f;
    bool doubleSpawned = false;

    public float minY = -1.05f;
    public float maxY = 1.05f;
    public float minDistance = .5f;

    public float minYDistance;
    public float minXDistance;

    float lastSpawnPosition = -100;
    float nextSpawnTime = 0;

    int numMeteorites = 0;


    int cachedSpawns = 5;
    Queue<GameObject> recentlySpawned = new Queue<GameObject>();
    float minSpawnDistance = 1f;

    private void Update()
    {
        if (nextSpawnTime > 0)
        {
            nextSpawnTime -= Time.deltaTime;
            return;
        }

        Vector3 newPos = new Vector3(3, Random.Range(minY, maxY), 0);
        float[] steps = new[] { -0.1f, 0.1f };
        float stepSize = steps[Random.Range(0, steps.Length)];
        bool jumped = false;
        while (recentlySpawned.Select(x => (Mathf.Abs(x.transform.position.x - newPos.x) > minXDistance || Mathf.Abs(x.transform.position.y - newPos.y) > minYDistance)).Contains(false))
        {
            newPos.y += stepSize;

            if (newPos.y < minY)
            {
                newPos.y = maxY;
                if (jumped) return;
                jumped = true;
            }
            if (newPos.y > maxY)
            {
                newPos.y = minY;
                if (jumped) return;
                jumped = true;
            }
        }

        Debug.Log(newPos.y);

        int rdm = Random.Range(0, objectToSpawn.Length);
        GameObject toSpawn = objectToSpawn[rdm];
        if (Random.Range(0, 1f) < percentMoney) toSpawn = Money;
        GameObject m = Instantiate(toSpawn, newPos, Quaternion.identity);
        dpl_droite meteorite = m.GetComponent<dpl_droite>();
        if (meteorite != null) meteorite.number = numMeteorites++;

        if (recentlySpawned.Count == cachedSpawns) recentlySpawned.Dequeue();
        recentlySpawned.Enqueue(m);

        if (!doubleSpawned && Random.Range(0, 1f) < percentDoubleSpawn)
        {
            nextSpawnTime = spawnTime * Random.Range(.5f, .1f);
            doubleSpawned = true;
        }
        else
        {
            nextSpawnTime = spawnTime * Random.Range(.5f, 1.1f);
            doubleSpawned = false;
        }

    }

}