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

public class CardManager : MonoBehaviour
{
    public static CardManager Instance;

    [SerializeField] private List<GameObject> cardPrefabs;
    [SerializeField] private Transform cardsParent;

    private PlayerSkillTree playerSkillTree;
    private GameObject cards;
    private PotionHandler potionHandler;


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

    }

    private void Start()
    {
        playerSkillTree = PlayerSkillTree.Instance;
        cards = GameObject.Find("Cards");
        cards.SetActive(false);
    }

    public void Update()
    {
        if (Input.GetKeyDown(KeyCode.V))
        {
            cards.SetActive(true);
            ShowRandomCards(3);
        }
    }

    public void ShowRandomCards(int count)
    {
        var unlockedSkills = playerSkillTree.GetPlayerSkills();

        var availableCards = cardPrefabs
            .Select(x => x.GetComponent<CardUI>())
            .Where(x => x != null && !unlockedSkills.Contains(x.Skill))
            .ToList();


        foreach (Transform child in cardsParent)
        {
            Destroy(child.gameObject);
        }

        var shuffled = availableCards.OrderBy(x => UnityEngine.Random.value).Take(count).ToList();

        Debug.Log($"Showing cards: {string.Join(", ", shuffled.Select(x => x.Skill))}");
        Debug.Log($"Available cards: {string.Join(", ", availableCards.Select(x => x.Skill))}");
        Debug.Log($"Unlocked skills: {string.Join(", ", unlockedSkills)}");


        if (shuffled.Count <= 0)
            return;

        float step = Screen.width / shuffled.Count;
        float pos = step - Screen.width / (2*shuffled.Count);


        foreach (var cardUI in shuffled)
        {
            var newCard = Instantiate(cardUI.gameObject, new Vector3(pos, Screen.height/2, 0), Quaternion.identity, cardsParent);
            pos += step;
        }
    }

    public void SelectCard(PlayerSkillTree.Skills skill, PotionHandler.PotionType potionType)
    {
        playerSkillTree.UnlockSkill(skill, potionType);

        foreach (Transform child in cardsParent)
        {
            var cardUI = child.GetComponent<CardUI>();
            if (cardUI.Skill == skill)
            {
                Destroy(child.gameObject);
            }
        }

        cards.SetActive(false);
    }
}