using System;
using System.Collections.Generic;
using System.Text;
using CommonLang.Property;
using CommonAI.Zone.ZoneEditor;
using CommonAI.Zone.Instance;
using CommonAI.Zone.Attributes;
using CommonAI.Zone.EventTrigger;

namespace CommonAI.Zone.ZoneEditor.EventTrigger
{
    [DescAttribute("场景初始化", "场景")]
    public class SceneInitialized : AbstractTrigger
    {
        public override string ToString()
        {
            return string.Format("当场景初始化时");
        }
        public override void Listen(EventTriggerAdapter api, EventArguments args)
        {
            api.listen_SceneInit(args, api.ZoneAPI);
        }
    }

    [DescAttribute("时间逝去", "时间")]
    public class TimeElapsed : AbstractTrigger
    {
        [DescAttribute("时间(秒)")]
        public float TimeSEC = 5.0f;
        public override string ToString()
        {
            return string.Format("当{0}秒之后", TimeSEC);
        }
        public override void Listen(EventTriggerAdapter api, EventArguments args)
        {
            api.listen_TimeDelaySEC(args, TimeSEC);
        }
    }

    [DescAttribute("时间间隔", "时间")]
    public class TimePeriodic : AbstractTrigger
    {
        [DescAttribute("时间(秒)")]
        public float EveryTimeSEC = 5.0f;

        public override string ToString()
        {
            return string.Format("每隔{0}秒", EveryTimeSEC);
        }
        public override void Listen(EventTriggerAdapter api, EventArguments args)
        {
            api.listen_TimePeriodicSEC(args, EveryTimeSEC);
        }
    }

    [DescAttribute("时间间隔按次数", "时间")]
    public class TimeTask : AbstractTrigger
    {
        [DescAttribute("延时时间(秒)")]
        public float DelayTimeSEC = 0f;
        [DescAttribute("间隔时间(秒)")]
        public float EveryTimeSEC = 5.0f;
        [DescAttribute("重复次数")]
        public int RepeatCount = 0;

        public override string ToString()
        {
            return string.Format("延时{0}秒,每隔{1}秒,执行{2}次", DelayTimeSEC, EveryTimeSEC, RepeatCount);
            
        }
        public override void Listen(EventTriggerAdapter api, EventArguments args)
        {
            api.listen_TimeTaskSEC(args, EveryTimeSEC, DelayTimeSEC, RepeatCount);
        }
    }



    [DescAttribute("(变量)时间逝去", "时间")]
    public class ValuedTimeElapsed : AbstractTrigger
    {
        [DescAttribute("时间(秒)")]
        public RealValue TimeSEC = new RealValue.VALUE(5);
        public override string ToString()
        {
            return string.Format("当{0}秒之后", TimeSEC);
        }
        public override void Listen(EventTriggerAdapter api, EventArguments args)
        {
            api.listen_TimeDelaySEC(args, TimeSEC.GetValue(api, args));
        }
    }

    [DescAttribute("(变量)时间间隔", "时间")]
    public class ValuedTimePeriodic : AbstractTrigger
    {
        [DescAttribute("时间(秒)")]
        public RealValue EveryTimeSEC = new RealValue.VALUE(5);

        public override string ToString()
        {
            return string.Format("每隔{0}秒", EveryTimeSEC);
        }
        public override void Listen(EventTriggerAdapter api, EventArguments args)
        {
            api.listen_TimePeriodicSEC(args, EveryTimeSEC.GetValue(api, args));
        }
    }

    [DescAttribute("(变量)时间间隔按次数", "时间")]
    public class ValuedTimeTask : AbstractTrigger
    {
        [DescAttribute("延时时间(秒)")]
        public RealValue DelayTimeSEC = new RealValue.VALUE(5);
        [DescAttribute("间隔时间(秒)")]
        public RealValue EveryTimeSEC = new RealValue.VALUE(5);
        [DescAttribute("重复次数")]
        public IntegerValue RepeatCount = new IntegerValue.VALUE(0);

        public override string ToString()
        {
            return string.Format("延时{0}秒,每隔{1}秒,执行{2}次", DelayTimeSEC, EveryTimeSEC, RepeatCount);

        }
        public override void Listen(EventTriggerAdapter api, EventArguments args)
        {
            api.listen_TimeTaskSEC(args, EveryTimeSEC.GetValue(api, args), DelayTimeSEC.GetValue(api, args), RepeatCount.GetValue(api, args));
        }
    }


    [DescAttribute("当从游戏服收到消息", "游戏服")]
    public class RecvMessageFromGS : AbstractTrigger
    {
        [DescAttribute("消息name")]
        public string Message;

        [DescAttribute("选择特定Unit作为触发单位(类型:数量:阵营;)。类型=1为死亡单位")]
        public string TriggerUnits;

        public override string ToString()
        {
            if(!string.IsNullOrEmpty(TriggerUnits))
            {
                return string.Format("当从游戏服收到消息“{0}”, 附加触发单位({1})", Message, TriggerUnits);
            }
            return string.Format("当从游戏服收到消息“{0}”", Message);
        }
        public override void Listen(EventTriggerAdapter api, EventArguments args)
        {
            api.listen_RecvMessageFromGS(args, api.ZoneAPI, Message, TriggerUnits);
        }
    }
    
}