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

public class ActivityItem : UIItemSelect
{
    public int m_ItemInfoId;
    public Image m_ActivityIcon;                    // 活动标记
    public Text m_ActivityName;                     // 活动描述
    public Text m_HasJoinedTimes;                   // 活动参加的次数
    public Text m_ActivityGotValue;                 // 活动对应的活力值
    public Image m_MarkTypeIcon;                    // 活动是否被推荐或者是组队、战斗类的活动
    public Button m_JoinButton;                     // 活动参加按钮
    public Text buttonDesc;                         // 已经接取任务的时候显示已接
    public Image m_LimitInfoImage;                  // 活动限制image
    public Text m_LimitInfoText;                    // 活动限制信息
    public GameObject m_ActivityValueItem;          // (是否显示活力要用到)
                                                       
    public Sprite recommendImage;                   // 推荐标记
    public Sprite limitTimeImage;                   // 限时标记
                                                       
                                                       
    public GameObject _CompleteIcon;                // 完成标记
    public GameObject _FinishIcon;                  // 接取标记 
    public GameObject _SelectEffect;

    public GameObject _expIcon;
    public GameObject _RedIcon;

    public GameObject _NormalParamPanel;
    public GameObject _SpecialParamPanel;
    public Text _SpecialParamText;

    public int m_curShowSceneID = -1;
    public int _ServerType = -1;
    public enum ActivityPromoteType
    {
        INVALID_PROMOTE = -1,
        IS_PROMOTE = 1,  //推荐
        NOT_PROMOTE = 2,  //不推荐
    }


    public override void Show(Hashtable hash)
    {
        base.Show();

        var itemInfo = (int)hash["InitObj"];
        // baseTab在InitItem中重复赋值!!!
        baseTab = TableManager.GetActivityBaseByID(itemInfo, 0);
        _ServerType = baseTab.ActivityServerType;
        RefreshHeadExpIcon();
        InitItem(itemInfo);
    }

    private Tab_ActivityBase baseTab = null;

    public void SetIconAndName()
    {
        LoadAssetBundle.Instance.SetImageSprite(m_ActivityIcon, baseTab.ActivityIcon);
        m_ActivityName.text = baseTab.ActivityName;
    }

    public bool IsCompleteLimitTimes()
    {
        //计算活力值
        Tab_ActivityActValLimit actvalLimit = TableManager.GetActivityActValLimitByID(baseTab.ActivityServerType, 0);
        if (actvalLimit == null)
        {
            return false;
        }
        int m_SingleActVal = actvalLimit.ActValPer;             // 单次活动的活力值 
        int m_AcitivityLimitTimes = baseTab.ActityLimitTimes;   // 活动限制的次数
        int param = 0;

        if (baseTab.ActivityServerType != -1)
        {
            param = ActivityDataManager.Instance.GetActivityCompleteTimes(baseTab.ActivityServerType);
            param = (param > 0 ? param : 0);
        }

        if (m_AcitivityLimitTimes == -1)
            return true;

        if (param >= m_AcitivityLimitTimes)
            return true;

        return false;
    }

    public void SetActValueAndCountAndLimitInfo()
    {
        //计算活力值
        Tab_ActivityActValLimit actvalLimit = TableManager.GetActivityActValLimitByID(baseTab.ActivityServerType, 0);
        if (actvalLimit == null)
        {
            return;
        }
        int m_SingleActVal = actvalLimit.ActValPer;             // 单次活动的活力值 
        int m_AcitivityLimitTimes = baseTab.ActityLimitTimes;   // 活动限制的次数
        int param = 0;

        // 多余判断,是-1就不可能获得表格数据 !!!
        if (baseTab.ActivityServerType != -1)
        {
            param = ActivityDataManager.Instance.GetActivityCompleteTimes(baseTab.ActivityServerType);
            param = (param > 0 ? param : 0);
        }

        //如果不限制次数
        if (m_AcitivityLimitTimes == -1)
        {
            //不限制活动次数
            m_HasJoinedTimes.text = StrDictionary.GetClientDictionaryString("#{43036}");// "不限制";
        }
        else
        {
            m_HasJoinedTimes.text = param.ToString() + "/" + m_AcitivityLimitTimes.ToString();
        }

        if (m_SingleActVal > 0)
        {
            m_ActivityValueItem.gameObject.SetActive(true);
            int m_DayLimitVal = actvalLimit.DayCountLimit;
            int m_TotalVal = m_SingleActVal * param;
            if (m_TotalVal > (m_SingleActVal * m_DayLimitVal))
            {
                m_ActivityGotValue.text = (m_SingleActVal * m_DayLimitVal).ToString() + "/" + actvalLimit.ActValPer * actvalLimit.DayCountLimit;
            }
            else
            {
                m_ActivityGotValue.text = m_TotalVal.ToString() + "/" + actvalLimit.ActValPer * actvalLimit.DayCountLimit;
            }

            // 这个 m_LimitTimes 作用何在 !!!
            int m_LimitTimes = -1;

            Tab_ActivityActValLimit limit = TableManager.GetActivityActValLimitByID(baseTab.ActivityServerType, 0);
            if (limit != null)
            {
                m_LimitTimes = limit.DayCountLimit;
            }

        }else
        {
            m_ActivityValueItem.gameObject.SetActive(false);
        }
    }

    public void ShowMarkIcon()
    {
        // 可将  m_MarkTypeIcon.gameObject.SetActive(false); 写在开头缩减代码
        if (!ActivityController.Instance().IsFinish(m_ItemInfoId))
        {
            //判断活动是否是推荐活动 显示推荐标记
            int m_PromoteType = baseTab.Promote;
            if (m_PromoteType == (int)ActivityPromoteType.IS_PROMOTE)
            {
                m_MarkTypeIcon.gameObject.SetActive(true);
                m_MarkTypeIcon.overrideSprite = recommendImage;
            }
            else if ((baseTab.ActivityType & 1) != 0)  //限时活动
            {
                m_MarkTypeIcon.gameObject.SetActive(true);
                m_MarkTypeIcon.overrideSprite = limitTimeImage;
            }
            else
            {
                m_MarkTypeIcon.gameObject.SetActive(false);
            }
        }
        else
        {
            m_MarkTypeIcon.gameObject.SetActive(false);
        }
    }


    //刷新当前是否要限时迎头经验高倍的标记

    public void RefreshHeadExpIcon()
    {
        if (GameManager.gameManager.PlayerDataPool.ActivityHeadExpDic.ContainsKey(_ServerType)
                 && GameManager.gameManager.PlayerDataPool.ActivityHeadExpDic[_ServerType] > 0)
        {
            RefreshHeadExpIcon(true);
        }
        else
        {
            RefreshHeadExpIcon(false);
        }
    }

    public void RefreshHeadExpIcon(bool isShow)
    {
        _expIcon.SetActive(isShow);
    }

    public void InitItem(int hash)
    {
        m_ItemInfoId = hash;
        if (m_ItemInfoId != -1)
        {
            baseTab = TableManager.GetActivityBaseByID(m_ItemInfoId, 0);
            if (baseTab == null)
            {
                return;
            }
            SpecialParam();
            //设置活动标志
            SetIconAndName();

            //设置活动的已经完成的以及限制次数
            SetActValueAndCountAndLimitInfo();

            //活动已经完成的就不再显示推荐标记
            ShowMarkIcon();

            //根据状态设置描述
            SetItemStateDesc();
        }
    }

    void SpecialParam()
    {
        _NormalParamPanel.SetActive(baseTab.ActivityServerType != (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_EXERCISEROOM);
        _SpecialParamPanel.SetActive(baseTab.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_EXERCISEROOM);
        if(baseTab.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_EXERCISEROOM)
        {
            ReqSpecialParam();
        }
    }

    public void RefershExerciseRoomRemainTime(int remainTime)
    {
        _SpecialParamText.text = remainTime + "";
    }

    void ReqSpecialParam()
    {
        //练功房
        ReqExerciseRoomInfo req = new ReqExerciseRoomInfo();
        req.flag = 1;
        req.SendMsg();
    }

    bool  IsSetNeedOpenServerTime(int id)
    {
        var activityBase = TableManager.GetActivityBaseByID(id, 0);
        if (activityBase == null)
            return false;

        if (activityBase.NeedOpenServerDay + 1 > GlobalData.OpenServerDays)
        {
            _FinishIcon.SetActive(false);
            _CompleteIcon.SetActive(false);
            m_JoinButton.gameObject.SetActive(false);
            m_LimitInfoImage.gameObject.SetActive(true);
            m_LimitInfoText.text = StrDictionary.GetClientDictionaryString("#{2186}", activityBase.NeedOpenServerDay - GlobalData.OpenServerDays + 1);

            return true;
        }

            return false;
    }

    public void SetItemStateDesc()
    {
        if (IsSetNeedOpenServerTime(m_ItemInfoId))
            return;
        if (ActivityController.GetActivityTimeState(m_ItemInfoId) == (int)ActivityController.ActivityTimeType.IsGoing
            || ActivityController.GetActivityTimeState(m_ItemInfoId) == (int)ActivityController.ActivityTimeType.WillOpenButShow)
        {
            if (!ActivityController.IsLevelEnough(m_ItemInfoId))
            {
                _FinishIcon.SetActive(false);
                _CompleteIcon.SetActive(false);

                m_JoinButton.gameObject.SetActive(false);

                m_LimitInfoImage.gameObject.SetActive(true);
                m_LimitInfoText.text = StrDictionary.GetClientDictionaryString("#{43033}", baseTab.Level.ToString());
            }
            else if((!ActivityController.IsCompleted(m_ItemInfoId)))
            {
                _FinishIcon.SetActive(false);
                _CompleteIcon.SetActive(false);

                //判断是否有当前任务在身上
                if (IsHaveThisTypeMission(m_ItemInfoId))
                {
                    m_JoinButton.gameObject.SetActive(false);

                    m_LimitInfoImage.gameObject.SetActive(true);
                    m_LimitInfoText.text = StrDictionary.GetClientDictionaryString("#{1619}");
                }
                else
                {
                    m_JoinButton.gameObject.SetActive(true);
                    buttonDesc.text = StrDictionary.GetClientDictionaryString("#{46214}", baseTab.Level.ToString());

                    m_LimitInfoImage.gameObject.SetActive(false);
                }
            
            }
            else
            {
                // 完成后是否隐藏 参加 按钮
                // 1 不隐藏
                if(baseTab.HideOnCompleted == 1)
                {
                    _FinishIcon.SetActive(false);
                    _CompleteIcon.SetActive(false);

                    m_JoinButton.gameObject.SetActive(true);
                    m_LimitInfoImage.gameObject.SetActive(false);
                    buttonDesc.text = StrDictionary.GetClientDictionaryString("#{46214}", baseTab.Level.ToString());
                }
                else
                {
                    _FinishIcon.SetActive(false);
                    _CompleteIcon.SetActive(true);

                    m_JoinButton.gameObject.SetActive(false);
                    m_LimitInfoImage.gameObject.SetActive(false);
                }
            }
        }
        else if(ActivityController.GetActivityTimeState(m_ItemInfoId) == (int)ActivityController.ActivityTimeType.WillOpen)
        {
            _FinishIcon.SetActive(false);
            _CompleteIcon.SetActive(false);

            if (!ActivityController.IsLevelEnough(m_ItemInfoId))
            {
                m_JoinButton.gameObject.SetActive(false);
                m_LimitInfoImage.gameObject.SetActive(true);
                m_LimitInfoText.text = StrDictionary.GetClientDictionaryString("#{43033}", baseTab.Level.ToString());
            }
            else if ((!ActivityController.IsCompleted(m_ItemInfoId)))
            {
                // 显示最近的开启时间
                int nearestTime = ActivityController.Instance().GetNearestOpenTime(m_ItemInfoId);
                int hour = nearestTime / 100;
                int minute = nearestTime - hour * 100;

                m_JoinButton.gameObject.SetActive(false);
                m_LimitInfoImage.gameObject.SetActive(true);
                m_LimitInfoText.text = StrDictionary.GetClientDictionaryString("#{2124}", hour, minute.ToString().Equals("0") ? "00" : minute.ToString());
            }
            else
            {
                if (baseTab.HideOnCompleted == 0)  //隐藏
                {
                    _FinishIcon.SetActive(false);
                    _CompleteIcon.SetActive(true);

                    m_JoinButton.gameObject.SetActive(false);
                    m_LimitInfoImage.gameObject.SetActive(false);
                }
                else
                {
                    _FinishIcon.SetActive(false);
                    _CompleteIcon.SetActive(false);

                    m_JoinButton.gameObject.SetActive(false);

                    // 显示最近的开启时间
                    int nearestTime = ActivityController.Instance().GetNearestOpenTime(m_ItemInfoId);
                    int hour = nearestTime / 100;
                    int minute = nearestTime - hour * 100;

                    m_LimitInfoImage.gameObject.SetActive(true);
                    m_LimitInfoText.text = StrDictionary.GetClientDictionaryString("#{2124}", hour, minute.ToString().Equals("0") ? "00" : minute.ToString());
                }
            }
        }
        else if(ActivityController.GetActivityTimeState(m_ItemInfoId) == (int)ActivityController.ActivityTimeType.Finish)
        {
            _FinishIcon.SetActive(true);
            _CompleteIcon.SetActive(false);
            m_JoinButton.gameObject.SetActive(false);
            m_LimitInfoImage.gameObject.SetActive(false);
        }

        if(m_JoinButton.gameObject.activeInHierarchy)
        {
            if(ActivityController.GetActivityTimeState(m_ItemInfoId) != (int)ActivityController.ActivityTimeType.IsGoing)
            {
                _RedIcon.SetActive(false);
                return;
            }

            if (IsCompleteLimitTimes())
            {
                _RedIcon.SetActive(false);
                return;
            }

            if (!IsGuildActivityShowRedIcon())
            {
                _RedIcon.SetActive(false);
                return;
            }

            _RedIcon.SetActive(true);
        }
    }

    public bool IsGuildActivityShowRedIcon()
    {
        if(baseTab.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_GUILDFREIGHT
            || baseTab.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_FEAST
            || baseTab.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_GUILD_ESCORT
            || baseTab.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_DRAGONWAR
            || baseTab.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_GUILD_UNION_MATCH
            || baseTab.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_GUIDBOSS
            || baseTab.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_GUILDPROBBERS)
        {
            if(!GameManager.gameManager.PlayerDataPool.IsHaveGuild())
            {
                return false;
            }
        }
        return true;
    }

    public static bool IsHaveThisTypeMission(int m_ItemInfoId)
    {
        Tab_ActivityBase activityBase = TableManager.GetActivityBaseByID(m_ItemInfoId, 0);
        if(activityBase != null)
        {
            foreach(var mission in GameManager.gameManager.MissionManager.MissionList.m_aMission)
            {
                Tab_MissionBase ownMission = TableManager.GetMissionBaseByID(mission.Key, 0);
                if(ownMission.MissionType == activityBase.MissionBaseType)
                {
                    return true;
                }
            }
        }
        return false;
    }

    public override void OnItemClick()
    {
        base.OnItemClick();
        showActivityInfoTip();
    }

    public void showActivityInfoTip()
    {
        UIManager.ShowUI(UIInfo.ActivityInfoTip, delegate (bool bSucess, object param)
        {
            if (bSucess)
            {
                ActivityInfoTipController.Instance.InitMyItemTip(m_ItemInfoId);
            }
        });
    }

    public enum Parameter_type  //点击按钮的去向类型
    {
        INVALID = -1,
        CHUANSONG = 1,
        FINDWAY = 2,
        OPENUI = 3,
        HUIBANG = 4,
        LOACL_CALLBACK = 5,
        MISSIONINSEC = 6,
       OPENPERIOUS = 7,
       ENTEREXERCISEROOM = 8,
       ENTERCOPY = 9,
    }

    public void MyItemClick()
    {
        if (m_ItemInfoId == 37)
        {
            MessageBoxLogic.OpenOKCancelBox(StrDictionary.GetClientDictionaryString("#{79509}"), null, delegate ()
            {
                ReqEnterForbiddenTop req = new ReqEnterForbiddenTop();
                req.Flag = 1;
                req.SendMsg();
                UIManager.CloseUI(UIInfo.Activity);
            },
            null);
            return;
        }
        ActivityController.ClickActive(m_ItemInfoId);
  
    }

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

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

    void DoTeleport()
    {
        if (GameManager.gameManager.ActiveScene.IsCopyScene())
        {
            GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{42632}"));
            return;
        }

        Tab_SceneClass tabSceneClass = TableManager.GetSceneClassByID(m_curShowSceneID, 0);
        if (null == tabSceneClass)
        {
            return;
        }
        SceneData.RequestChangeScene((int)CG_REQ_CHANGE_SCENE.CHANGETYPE.WORLDMAP, 0, m_curShowSceneID, -1, (int)tabSceneClass.SafeX, (int)tabSceneClass.SafeZ);
        UIManager.CloseUI(UIInfo.Activity);
    }

    public void ShowSelectEffect(bool isShow)
    {
        if (_SelectEffect != null)
            _SelectEffect.SetActive(isShow);
    }

    private void OnDisable()
    {
        HideEffect();
    }

    public void HideEffect()
    {
        if (_SelectEffect != null)
            _SelectEffect.SetActive(false);
    }
}