using System.Collections;
using GCGame.Table;
using Module.Log;
using UnityEngine;
using UnityEngine.UI;

// 用于显示充值项
// 主要区分月卡和其他普通充值项
public class RechargeItem : UIItemSelect
{
    public GameObject Recommend; // 推荐标志 通用

    public GameObject festivalInfo; // 节日用
    public Text festivalPrice; // 价格 普通
    public Text festivalAward; // 首次充值奖励
    public Text festivalYuanBaoNum; // 兑换灵玉数目

    public GameObject normalInfo; // 普通的描述
    public Text Price; // 价格 普通
    public GameObject awardControl; // 控制award的整体显示
    public GameObject firstAwardCtr; // 首次奖励控制
    public GameObject secondAwardCtr; // 二次奖励控制
    public Text firstAward; // 首次充值奖励
    public Text secondAward; // 二次充值奖励
    public Text YuanBaoNum; // 兑换灵玉数目
    public Image Icon; // 商品图标 

    public GameObject monthCardInfo; // 月卡的描述
    public Text yuanBaoNum_M; // 兑换灵玉数 
    public Text eachDayAward_M; // 月卡每日奖励元宝数
    public Text continuedDay; // 持续时间
    public Text monthPrice; // 价格 月卡

    private bool hasRecPacket;

    private int state = 1; // 状态,仅针对非月卡的购买项。0-首次,1-二次,3-节日
    private Tab_Recharge tab; // 

    public int TabID
    {
        get
        {
            if (tab == null)
                return -1;
            return tab.Id;
        }
    }

    public override void Show(Hashtable hash)
    {
        var chargeId = (int) hash["InitObj"];
        tab = TableManager.GetRechargeByID(chargeId);
        if (tab == null)
            return;
        base.Show(hash);

        ShowInfo();
    }

    private void ShowInfo()
    {
        //Type: 0-正常 1-月卡
        if (tab.Type == 1)
        {
            ShowMoneyCard();
        }
        else
        {
            // 是否有节日活动
            if (state == 0)
                ShowFestivalPrice();
            else
                ShowNormal();
        }
    }

    private void ShowFestivalPrice()
    {
        normalInfo.SetActive(false);
        festivalInfo.SetActive(true);
        monthCardInfo.SetActive(false);

        festivalPrice.text = tab.RmbNum + StrDictionary.GetClientDictionaryString("#{4467}");
        festivalAward.text = tab.FestivalAward.ToString();
        festivalYuanBaoNum.text = tab.MoneyNum.ToString();
    }

    private void ShowNormal()
    {
        normalInfo.SetActive(true);
        festivalInfo.SetActive(false);
        monthCardInfo.SetActive(false);

        LoadAssetBundle.Instance.SetImageSprite(Icon, tab.ICON);
        Recommend.SetActive(tab.Recommend == 1);
        Price.text = tab.RmbNum + StrDictionary.GetClientDictionaryString("#{4467}");

        // 当首冲奖励为 -1 时 尝试显示二次奖励,若也为 -1,则奖励部分全部不显示
        if (state == 1)
        {
            if (tab.FirstAward > 0)
            {
                awardControl.SetActive(true);
                firstAwardCtr.gameObject.SetActive(hasRecPacket ? true : false); //初始化隐藏,收到协议的时候用协议数据刷新 
                secondAwardCtr.gameObject.SetActive(false);
                firstAward.text = tab.FirstAward.ToString();
            }
            else
            {
                awardControl.SetActive(false);
                LogModule.ErrorLog("Try to show firstPrize, but not match config !!!");
            }
        }
        else if (state == 2)
        {
            if (tab.OtherAward > 0)
            {
                awardControl.SetActive(true);
                firstAwardCtr.gameObject.SetActive(false);
                secondAwardCtr.gameObject.SetActive(true);
                secondAward.text = tab.OtherAward.ToString();
            }
            else
            {
                awardControl.SetActive(false);
                //LogModule.ErrorLog("Try to show otherPrize, but not match config !!!");
            }
        }

        YuanBaoNum.text = tab.MoneyNum.ToString();
    }

    private void ShowMoneyCard()
    {
        normalInfo.SetActive(false);
        festivalInfo.SetActive(false);
        monthCardInfo.SetActive(true);

        monthPrice.text = tab.RmbNum + StrDictionary.GetClientDictionaryString("#{4467}");
        yuanBaoNum_M.text = tab.MoneyNum.ToString();
        eachDayAward_M.text = tab.DailyPrize.ToString();
        continuedDay.text = StrDictionary.GetClientDictionaryString("#{86710}", tab.DaysCount);
    }

    public void Refresh(int state)
    {
        hasRecPacket = true;
        this.state = state;
        ShowInfo();
    }
}