using UnityEngine;
using System.Collections.Generic;




public class ObjectSpawner : MonoBehaviour
{
    public static ObjectSpawner Instance;

    [Header("Prefaby")]
    public GameObject[] objectPrefabs;
    public GameObject holePrefab;

    [Header("Počty")]
    [Tooltip("Kolik předmětů spawnovat")]
    public int objectCount = 3;
    [Tooltip("Kolik děr spawnovat")]
    public int holeCount = 1;

    [Header("Pohyb děr")]
    public bool holesMove = false;
    public float holeMoveSpeed = 2f;

    [Header("Spawn hranice (odpovídají kameře)")]
    public float minX = -3.5f;
    public float maxX = 3.5f;
    public float minY = -5f;
    public float maxY = 4f;

    [Header("Rodiče pro přehlednost (volitelné)")]
    public Transform objectParent;
    public Transform holeParent;

    private List<GameObject> spawnedObjects = new List<GameObject>();
    private List<GameObject> spawnedHoles = new List<GameObject>();

    void Awake()
    {
        if (Instance == null) Instance = this;
        else Destroy(gameObject);
    }

    void Start()
    {
        Spawn();
    }

    public void Spawn()
    {
        Clear();

        // LevelManager na aktuální počet
        if (LevelManager.Instance != null)
        {
            LevelManager.Instance.itemsToScore = objectCount;
            LevelManager.Instance.ResetCounter();
        }

        SpawnHoles();
        SpawnObjects();
    }

    void SpawnHoles()
    {
        for (int i = 0; i < holeCount; i++)
        {
            Vector2 pos = RandomPos(1f);
            GameObject hole = Instantiate(holePrefab, pos, Quaternion.identity, holeParent);

            Hole h = hole.GetComponent<Hole>();
            if (h != null && holesMove)
            {
                h.hasMovement = true;
                h.moveSpeed = holeMoveSpeed;
                h.moveRange = new Vector2(Random.Range(0.8f, 1.8f), 0f);
            }

            spawnedHoles.Add(hole);
        }
    }

    void SpawnObjects()
    {
        for (int i = 0; i < objectCount; i++)
        {
            GameObject prefab = objectPrefabs[Random.Range(0, objectPrefabs.Length)];
            Vector2 pos = RandomPos(0.5f);
            GameObject obj = Instantiate(prefab, pos, Quaternion.identity, objectParent);

            // Náhodná barva
            SpriteRenderer sr = obj.GetComponent<SpriteRenderer>();
            if (sr != null)
                sr.color = Random.ColorHSV(0f, 1f, 0.7f, 1f, 0.9f, 1f);

            spawnedObjects.Add(obj);
        }
    }

    public void Clear()
    {
        foreach (var o in spawnedObjects) if (o != null) Destroy(o);
        foreach (var h in spawnedHoles) if (h != null) Destroy(h);
        spawnedObjects.Clear();
        spawnedHoles.Clear();
    }

    Vector2 RandomPos(float margin) =>
        new Vector2(
            Random.Range(minX + margin, maxX - margin),
            Random.Range(minY + margin, maxY - margin)
        );
}
