using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
using Module.Log;
using Games.GlobeDefine;
using GCGame.Table;

public class WorldMapItemInfo : MonoBehaviour
{
    public Transform Child;
    public GameObject Fog;

    private Transform OPenObj;
    private Transform LockObj;
    private Text Name;
    private Text Level;

    private int m_SceneID = -1;
    public int ScenID {
            get { return m_SceneID; }
            private set { m_SceneID = value; }
    }

    public void UpdateInfo()
    {
        Tab_Fuben Fuben = TableManager.GetFubenByID(m_SceneID, 0);
        if (Fuben == null)
            return;
        Tab_SceneClass SceneClass = TableManager.GetSceneClassByID(m_SceneID, 0);
        if (SceneClass == null)
            return;
        int level = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level;
        if (Fuben != null && Fuben.PlayerLevelMin <= level)
        {
            Fog.SetActive(false);
            if (OPenObj != null)
                OPenObj.gameObject.SetActive(true);
            if(LockObj != null)
                LockObj.gameObject.SetActive(false);
            if(Name != null)
                Name.text = string.Format("<color=#42385cff>{0}</color>", SceneClass.Name);
            if(Level!=null)
                Level.text = string.Format("<color=#bdc3d5ff>{0}</color>", SceneClass.MapLevel);
        }
        else
        {
            Fog.SetActive(true);
            if (OPenObj != null)
                OPenObj.gameObject.SetActive(false);
            if (LockObj != null)
                LockObj.gameObject.SetActive(true);
            if (Name != null)
                Name.text = string.Format("<color=#1c1c2bff>{0}</color>", SceneClass.Name);
            if (Level != null)
                Level.text = string.Format("<color=#9ea0a5ff>{0}</color>", SceneClass.MapLevel);
        }
    }

    public void Init(int SceneId,GameObject MapInfoObj)
    {
        m_SceneID = SceneId;
        Tab_SceneClass SceneClass = TableManager.GetSceneClassByID(SceneId, 0);
        if (SceneClass == null)
            return;

        Button clickBtn = GetComponentInChildren<Button>();
        if(clickBtn!=null)
        {
            clickBtn.onClick.AddListener(OnMapItemClick);
        }

        if(Child!=null)
        {
            MapInfoObj.SetActive(true);
            MapInfoObj.transform.SetParent(Child);
            MapInfoObj.transform.localPosition = Vector3.zero;
            MapInfoObj.transform.localScale = Vector3.one;

            OPenObj = MapInfoObj.transform.Find("OPen");
            LockObj = MapInfoObj.transform.Find("Lock");
            Transform NameObj = MapInfoObj.transform.Find("Name");
            if(NameObj!=null)
            {
                Name = NameObj.GetComponent<Text>();
            }
            Transform LevelObj = MapInfoObj.transform.Find("Level");
            if (LevelObj != null)
            {
                Level = LevelObj.GetComponent<Text>();
            }
        }
        UpdateInfo();
    }

    public void OnMapItemClick()
    {
        //组队跟随,不响应
        if (GameManager.gameManager.PlayerDataPool.IsFollowTeam)
        {
            GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{5128}"));
            return;
        }

        Tab_Fuben scene = TableManager.GetFubenByID(m_SceneID, 0);
        if (scene != null)
        {
            if (Singleton<ObjManager>.Instance.MainPlayer != null && GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level < scene.PlayerLevelMin)
            {
                GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{5327}"));
                return;
            }
        }

        if (m_SceneID >= 0 && Singleton<ObjManager>.GetInstance().MainPlayer != null && m_SceneID != GameManager.gameManager.RunningScene)
        {

            if (GCGame.Utils.IsCanPK(m_SceneID) && !GCGame.Utils.IsIncPKValue(m_SceneID))
            {
                MessageBoxLogic.OpenOKCancelBox(StrDictionary.GetClientDictionaryString("#{2672}"), "", EnterNonePKValueSceneOK);
            }
            else
            {
                EnterNonePKValueSceneOK();
            }
        }
    }

    void EnterNonePKValueSceneOK()
    {
        Tab_SceneClass tabSceneClass = TableManager.GetSceneClassByID(m_SceneID, 0);
        if (null == tabSceneClass)
        {
            return;
        }

        MessageBoxLogic.OpenOKCancelBox(StrDictionary.GetClientDictionaryString("#{1644}", tabSceneClass.Name), "", DoTeleport);
    }

    void ChangeScene()
    {
        Tab_SceneClass tabSceneClass = TableManager.GetSceneClassByID(m_SceneID, 0);
        if (null == tabSceneClass)
        {
            return;
        }
        // 传送时,停止主角移动并停止自动寻路
        var mainPlayer = ObjManager.Instance.MainPlayer;
        if (mainPlayer != null)
            mainPlayer.StopMove();
        GameManager.gameManager.AutoSearch.Stop();
        if (Singleton<ObjManager>.Instance.MainPlayer.IsInPaoShang())
        {
            GUIData.AddNotifyData(GCGame.Table.StrDictionary.GetClientDictionaryString("{#3937}"));
            return;
        }
        SceneData.RequestChangeScene((int)CG_REQ_CHANGE_SCENE.CHANGETYPE.WORLDMAP, 0, m_SceneID, -1, (int)tabSceneClass.SafeX, (int)tabSceneClass.SafeZ);
        UIManager.CloseUI(UIInfo.WorldMapWindow);
    }

    void DoTeleport()
    {
        if (GameManager.gameManager.ActiveScene.IsCopyScene())
        {
            string strDic = StrDictionary.GetClientDictionaryString("#{2345}");
            Tab_Fuben fuben = TableManager.GetFubenByID(GameManager.gameManager.PlayerDataPool.EnterSceneCache.EnterCopySceneID, 0);
            if (fuben != null && fuben.PositiveLeave > 1)
            {
                Tab_StrDictionary pDictionary = TableManager.GetStrDictionaryByID(fuben.PositiveLeave, 0);
                if (pDictionary != null)
                {
                    strDic = pDictionary.StrDictionary;
                }
            }
            MessageBoxLogic.OpenOKCancelBox(strDic, "", ChangeScene);
            return;
        }
        ChangeScene();
    }
}