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


public class EnemySpawnController : MonoBehaviour
{
    [SerializeField] List<Opponent> enemyList;
    [SerializeField] List<Image> enemySprites;

    Dictionary<Opponent, Image> enemys = new Dictionary<Opponent, Image>();

    StatsManager statsManager;
    float mana;

    Opponent activeSpawn;
    [SerializeField] GameObject dragObject;
    GameObject enemyImage;

    private void Awake()
    {
        statsManager = FindObjectOfType<StatsManager>();
        mana = -1;

        for (int i = 0; i < enemyList.Count; i++)
        {
            enemys.Add(enemyList[i], enemySprites[i]);
        }
    }

    // Update is called once per frame
    void Update()
    {
        if (mana != statsManager.GetMana())
        {
            mana = statsManager.GetMana();
            ChangeActiveState();
        }
    }

    void ChangeActiveState()
    {
        foreach (KeyValuePair<Opponent, Image> enemy in enemys)
        {
            if (enemy.Key.enemyCost > mana)
            {
                enemy.Value.color = new Color(0.3f,0.3f,0.3f,1f);
            }
            else
            {
                enemy.Value.color = new Color(1f,1f,1f,1f);
            }
        }
    }

    void SetEnemyToSpawnObject(string enemyName)
    {
        foreach (Opponent enemy in enemyList)
        {
            if (enemy.Name == enemyName)
            {
                activeSpawn = enemy;
            }
        }
    }

    public void OnEnemyMouseDown(string enemyName)
    {
        SetEnemyToSpawnObject(enemyName);
        if (statsManager.ModifyMana(-1*(int)activeSpawn.enemyCost))
        {
            dragObject.GetComponent<Image>().sprite = activeSpawn.EnemySprite;
            enemyImage = Instantiate(dragObject, PositionPrefab(), Quaternion.identity,transform);
        }
    }
    
    Vector3 PositionPrefab()
    {
        Vector3 pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        pos.z = 0;
        return pos;
    }

    public void OnEnemyDrag()
    {
        if (enemyImage != null)
        {
            enemyImage.transform.position = PositionPrefab();
        }

    }

    public void OnEnemyDrop()
    {
        Destroy(enemyImage);
        enemyImage = null;
        Instantiate(activeSpawn.enemyPrefab,PositionPrefab(),Quaternion.identity);
    }
}