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

public class LevelCell : MonoBehaviour
{
    public Action<int> DelClick;

    [SerializeField] Button mBtnBg;
    [SerializeField] ImageNum mInmLevel;
    [SerializeField] Image mImgIconBg;
    [SerializeField] Image mImgIcon;
    [SerializeField] GameObject mGobDone;
    [SerializeField] GameObject mGobComplete;
    [SerializeField] Image mImgProgress;

    [SerializeField] GameObject mGobEmpty;
    [SerializeField] GameObject mGobComingSoon;

    private int mIndex;
    private int mLevelID;
    
    private void Awake()
    {
        UIUtils.BindBtn(mBtnBg, OnClick);
    }

    public void Init(int pIndex)
    {
        mIndex = pIndex;

        mLevelID = GameConfig.Instance.LevelSort[mIndex];
        LevelData tLvData = GameConfig.Instance.GetLevelData(mLevelID);

        mInmLevel.SetNum(mIndex + 1);
        if (ColorUtility.TryParseHtmlString(tLvData.LevelColorCode, out Color tBgColor))
        {
            mImgIconBg.color = tBgColor;
        }

        mImgIcon.sprite = ResourceManager.Instance.LoadRes<Sprite>(Const.Path.GetLevelIconSmall(mLevelID));

        int tUnlockedEndingCount = PlayerData.Instance.EndingCountOfLevel(mLevelID);
        bool tIsAllEndingsDone = tUnlockedEndingCount == tLvData.Endings.Count;
        mGobDone.SetActive(tIsAllEndingsDone);
        mGobComplete.SetActive(tIsAllEndingsDone);

        mImgProgress.fillAmount = (float)tUnlockedEndingCount / tLvData.Endings.Count;

        mBtnBg.gameObject.SetActive(true);
        mGobEmpty.gameObject.SetActive(false);
        mGobComingSoon.gameObject.SetActive(false);
    }

    public void SetEmpty()
    {
        mBtnBg.gameObject.SetActive(false);
        mGobEmpty.gameObject.SetActive(true);
        mGobComingSoon.gameObject.SetActive(false);
    }

    public void SetComingSoon()
    {
        mBtnBg.gameObject.SetActive(false);
        mGobEmpty.gameObject.SetActive(false);
        mGobComingSoon.gameObject.SetActive(true);
    }

    private void OnClick()
    {
        DelClick?.Invoke(mIndex);
    }
}