using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using PlayFab;
using PlayFab.ClientModels;
using UnityEngine;

public class LeaderboardUIScreen : MonoBehaviour
{
    [SerializeField] private GameObject lbItemPrefab;
    [SerializeField] private GameObject lbItemSelfPrefab;
    [SerializeField] private Transform content;
    [SerializeField] private List<LBPedestalItem> _lbPedestalItems;

    
    public void Init()
    {
        PlayFabManager.Instance.playFabLeaderboards.GetLeaderboard(OnLeaderboardFetchSuccess, OnLeaderboardFetchFailure);
    }

    public void OnClose()
    {
        // GameObject[] temp = content.transform.GetComponentsInChildren<GameObject>();
        // for (int i = 0; i < temp.Length; i++)
        // {
            // Destroy(temp[i]);
        // }
    }
    private void OnLeaderboardFetchSuccess(List<PlayerLeaderboardEntry> leaderboard)
    {
        foreach (Transform child in content.transform)
        {
            Destroy(child.gameObject);
        }
        PopulateLeaderboard(leaderboard);
    }

    private void PopulateLeaderboard(List<PlayerLeaderboardEntry> leaderboard)
    {
        foreach (PlayerLeaderboardEntry lbEntry in leaderboard)
        {
            PopulateLbItem(lbEntry);
            if (lbEntry.Position <= 2)
            {
                PopulatePedestalItem(lbEntry);
            }
        }

        content.GetComponent<RectTransform>().DOAnchorPosX(0f,1f).SetEase(Ease.OutElastic);
    }

    private void PopulateLbItem(PlayerLeaderboardEntry lbEntry)
    {
        bool isSelf = lbEntry.Profile.PlayerId == PlayFabManager.Instance.playFabUserDataManager.myProfile.PlayerId;
        LBEntryItem lbItem = Instantiate(isSelf ? lbItemSelfPrefab : lbItemPrefab, content).GetComponent<LBEntryItem>();
        lbItem.nameText.text = lbEntry.DisplayName;
        lbItem.rankText.text = (lbEntry.Position + 1).ToString();
        lbItem.scoreText.text = lbEntry.StatValue.ToString();
        PlayFabManager.Instance.playFabUserDataManager.GetPlayerAvatarImage(lbEntry.PlayFabId, (sprite) =>
            {
                lbItem.profilePic.sprite = sprite;
            },
            (s) =>
            {
                Debug.Log("Couldnt get pic");
            });
    }

    private void PopulatePedestalItem(PlayerLeaderboardEntry lbEntry)
    {
        LBPedestalItem pedestalItem = _lbPedestalItems[lbEntry.Position];
        pedestalItem.nameText.text = lbEntry.DisplayName??lbEntry.PlayFabId;
        pedestalItem.scoreText.text = lbEntry.StatValue.ToString();
        PlayFabManager.Instance.playFabUserDataManager.GetPlayerAvatarImage(lbEntry.PlayFabId, (sprite) =>
            {
                pedestalItem.profilePic.sprite = sprite;
            },
            (s) =>
            {
                Debug.Log("Could'nt get pic");
            });
    }

    private void OnLeaderboardFetchFailure(PlayFabError obj)
    {
        Debug.Log("Couldn't Load Leaderboards");
        throw new System.NotImplementedException();
    }


}