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

public class WeedingPanelCtr : MonoBehaviour {
    public static WeedingPanelCtr Instance;
    private void Awake()
    {
        Instance = this;
    }

    #region
    public List<Image> roleHeadIconList;
    public List<Text> roleNameList;

    public GameObject weedingItemPrefab;
    public Transform weedingItemParent;

    public RingItem selfRingItem;
    public RingItem selfPreviewRingItem;

    public RingItem otherRingItem;
    public RingItem otherPreviewRingItem;

    private int curSelectedWeedingId = (int)WeedingType.Level_High;  //当前选择的婚礼规模(默认为豪华)
    #endregion

    public enum WeedingType
    {
        Level_High = 1,
        Level_Middle = 2,
        Level_Low = 3,
    }

    void OnEnable()
    {
        curSelectedWeedingId = (int)WeedingType.Level_High;
        CreateWeedingItem();
        SetRoleHeadIconList();
        SetRoleNameList();
        ReqOtherRingInfo();
        InitSelfRingInfo();
    }

    public void ReqOtherRingInfo()
    {
        if(GameManager.gameManager.PlayerDataPool.TeamInfo.GetTeamMember(1).IsValid())
        {
            ReqGetOtherMarryRingInfo req = new ReqGetOtherMarryRingInfo();
            req.guid = (long)GameManager.gameManager.PlayerDataPool.TeamInfo.GetTeamMember(1).Guid;
            req.SendMsg();
        }
    }

    public void InitSelfRingInfo()
    {
        selfRingItem.InitRingItem();
        selfPreviewRingItem.InitRingItem((int)MarryRingCtr.RingType.Marry, GameManager.gameManager.PlayerDataPool.MyRingInfoData.GetRingInfo().ringLevel);
    }

    public void InitOtherRingInfo(RespGetOtherMarryRingInfo packet)
    {
        otherRingItem.InitRingItem(packet.ringType, packet.ringlevel);
        otherPreviewRingItem.InitRingItem((int)MarryRingCtr.RingType.Marry, packet.ringlevel);
    }

    public void SetRoleHeadIconList()
    {
        for(int index = 0; index < roleHeadIconList.Count; index++)
        {
            if (GameManager.gameManager.PlayerDataPool.TeamInfo.GetTeamMember(0).IsValid())
            {
                roleHeadIconList[index].gameObject.SetActive(true);
                LoadAssetBundle.Instance.SetImageSprite(roleHeadIconList[index], Utils.GetProfessionSpriteName(GameManager.gameManager.PlayerDataPool.TeamInfo.GetTeamMember(index).Profession));
            }else
            {
                roleHeadIconList[index].gameObject.SetActive(false);
            }
        }
    }

    public void SetRoleNameList()
    {
        for (int index = 0; index < roleHeadIconList.Count; index++)
        {
            if (GameManager.gameManager.PlayerDataPool.TeamInfo.GetTeamMember(0).IsValid())
            {
                roleNameList[index].gameObject.SetActive(true);
                roleNameList[index].text = GameManager.gameManager.PlayerDataPool.TeamInfo.GetTeamMember(index).MemberName;
            }else
            {
                roleNameList[index].gameObject.SetActive(false);
            }
        }
    }

    private List<WeedingItem> itemPrefabList = new List<WeedingItem>();
    public void CreateWeedingItem()
    {
        var weedingConfig = TableManager.GetWeedingConfig().Values;
        ClearAllItemPrefab();
        foreach (var config in weedingConfig)
        {
            if(config.MarryType == 0)  //结婚
            {
                GameObject item = GameObject.Instantiate(weedingItemPrefab);

                item.transform.SetParent(weedingItemParent);
                item.transform.localPosition = Vector3.zero;
                item.transform.localRotation = Quaternion.Euler(Vector3.zero);
                item.transform.localScale = Vector3.one;

                item.GetComponent<WeedingItem>().InitWeedingItem(config.Id);
                itemPrefabList.Add(item.GetComponent<WeedingItem>());
            }
        }
        if (itemPrefabList.Count > 0)
            OnWeedingItemClick(itemPrefabList[0].weedingId);
    }

    public void ClearAllItemPrefab()
    {
        for(int index = 0; index < itemPrefabList.Count; index++)
        {
            GameObject.Destroy(itemPrefabList[index].gameObject);
        }
        itemPrefabList.Clear();
    }

    //需要服务器同步当前双方戒指的等级
    public void InitRingItem(int manRingLevel, int felmaleRingLevel)
    {

    }

    public void OnWeedingItemClick(int weedingId)
    {
        curSelectedWeedingId = weedingId;
        for (int index = 0; index < itemPrefabList.Count; index++)
        {
            itemPrefabList[index].ShowMarkIcon(weedingId == itemPrefabList[index].weedingId);
        }
    }

    public void OnReqMarrybtnClick()
    {
        //判断当前的消耗
        Tab_WeedingConfig config = TableManager.GetWeedingConfigByID(curSelectedWeedingId, 0);
        if(config == null)
        {
            return;
        }

        if(config.ConsumeType == (int)CONSUM_TYPE.MONEY)
        {
            if(JudgeMoneyLogic.IsMoneyEnough((MONEYTYPE)config.ConsumeSubType, config.ConsumeValue))
            {

                string consumeDesc = "";
                string weedingTyleDesc = "";
                for(int index = 0; index < itemPrefabList.Count; index++)
                {
                    if(itemPrefabList[index].weedingId == curSelectedWeedingId)
                    {
                        consumeDesc = itemPrefabList[index].consumeDescAndValue.text;
                        weedingTyleDesc = itemPrefabList[index].weedingName.text;
                    }
                }

                if (GameManager.gameManager.PlayerDataPool.TeamInfo.GetTeamMember(1).IsValid())
                {
                    //请求结婚
                    MessageBoxLogic.OpenOKCancelBox(StrDictionary.GetClientDictionaryString("#{46355}", consumeDesc, roleNameList[1].text, weedingTyleDesc), "", delegate ()
                    {
                        ReqMarry req = new ReqMarry();
                        req.weddingType = curSelectedWeedingId;
                        req.beMarriedGuid = -1;
                        req.SendMsg();

                        UIManager.CloseUI(UIInfo.MessageBox);
                        OnCloseBtnClick();
                    }, delegate ()
                    {
                        UIManager.CloseUI(UIInfo.MessageBox);
                    });
                }
            }
        }
    }

    public void OnCloseBtnClick()
    {
        UIManager.CloseUI(UIInfo.WeedingPanel);
    }
}