using GCGame.Table;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ActivityRedStateCtr
{
    private static ActivityRedStateCtr _Instanace;
    public static ActivityRedStateCtr Instance
    {
        get
        {
            if (_Instanace == null)
                _Instanace = new ActivityRedStateCtr();
            return _Instanace;
        }
    }

    public void RefreshActState()
    {

        if (ActivityController.Instance() && ActivityController.Instance().isActiveAndEnabled)
        {
            ActivityController.Instance().RefreshMenuItemRedIconState();
            ActivityController.Instance().RefreshActvityItemState();
        }

        var _OnTimeList = new List<Tab_ActivityBase>();
        var _CurServerTime = GCGame.Utils.GetServerDateTime();
        foreach (var act in TableManager.GetActivityBase().Values)
        {
            var openTime = act.Recurrent.Split('|');
            for (int index = 0; index < openTime.Length; index++)
            {
                if (int.Parse(openTime[index]) == (int)_CurServerTime.DayOfWeek)
                    _OnTimeList.Add(act);
            }
        }

        for (int index = 0; index < _OnTimeList.Count; index++)
        {
            var activityBase = _OnTimeList[index];
            if (activityBase == null)
                continue;

            if(GameManager.gameManager.PlayerDataPool.IsHaveActrivityRewCanGet)
            {
                FunctionButtonLogic.Instance().ShowActivityRedIcon(true);
                return;
            }

            var actId = activityBase.Id;
            if (CanJoin(actId))
            {
                //帮派任务特殊处理
                if (activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_GUILDFREIGHT
                 || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_FEAST
                 || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_GUILD_ESCORT
                 || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_DRAGONWAR
                 || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_GUILD_UNION_MATCH
                 || activityBase.ActivityServerType == (int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_GUIDBOSS)
                {
                    if (!GameManager.gameManager.PlayerDataPool.IsHaveGuild())
                    {
                        if (FunctionButtonLogic.Instance())
                            FunctionButtonLogic.Instance().ShowActivityRedIcon(false);
                        return;
                    }
                }
                if (FunctionButtonLogic.Instance())
                {
                    FunctionButtonLogic.Instance().ShowActivityRedIcon(true);
                    return;
                }
            }
        }

        if (FunctionButtonLogic.Instance())
            FunctionButtonLogic.Instance().ShowActivityRedIcon(false);
    }

    public bool CanJoin(int actId)
    {
        return IsLevelEnough(actId) && IsOnOpenTime(actId) && !IsCompleted(actId);
    }

    public bool IsLevelEnough(int activityId)
    {
        Tab_ActivityBase activityBase = TableManager.GetActivityBaseByID(activityId, 0);
        if (activityBase == null)
        {
            return false;
        }
        if (GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level >= activityBase.Level)
        {
            return true;
        }
        return false;
    }

    public bool IsCompleted(int activityId)
    {
        Tab_ActivityBase activityBase = TableManager.GetActivityBaseByID(activityId, 0);
        if (activityBase == null)
        {
            return false;
        }
        Tab_ActivityActValLimit valLimit = TableManager.GetActivityActValLimitByID(activityBase.ActivityServerType, 0);
        if (valLimit == null)
        {
            return false;
        }
        int complete = ActivityDataManager.Instance.GetActivityCompleteTimes(activityBase.ActivityServerType);
        if (complete>=0 && complete>= valLimit.DayCountLimit)
        {
            return true;
        }
        else
        {
            return false;
        }

    }

    public bool IsOnOpenTime(int activityId)
    {
        if (GetActivityTimeState(activityId) == (int)ActivityController.ActivityTimeType.IsGoing)
        {
            return true;
        }

        return false;
    }

    public int GetActivityTimeState(int m_AcId)
    {
        Tab_ActivityBase activityBase = TableManager.GetActivityBaseByID(m_AcId, 0);
        if (activityBase == null)
            return -1;

        if (ActivityDataManager.Instance.IsActivityState(activityBase.ActivityServerType,ActivityDataManager.ActivityState.Playing))
            return (int)ActivityController.ActivityTimeType.IsGoing;
        else
            return (int)ActivityController.ActivityTimeType.Finish;  //活动已结束
    }
}