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

namespace CommonAI.Zone.ZoneEditor.EventTrigger
{
    [DescAttribute("接受任务(常量)", "任务")]
    public class AcceptQuest : AbstractAction
    {
        [DescAttribute("单位")]
        public UnitValue Unit = new UnitValue.Trigging();
        [QuestIDAttribute]
        [DescAttribute("任务ID")]
        public string Quest;
        [DescAttribute("参数")]
        public StringValue Args = new StringValue.VALUE("");
        public override string ToString()
        {
            return string.Format("接受任务[{0}]", Quest);
        }
        public override void DoAction(EventTriggerAdapter api, EventArguments args)
        {
            InstancePlayer p = Unit.GetValue(api, args) as InstancePlayer;
            if (p != null)
            {
                api.ZoneAPI.doAcceptQuest(p, Quest, Args.GetValue(api, args));
            }
        }
    }

    [DescAttribute("提交完成任务(常量)", "任务")]
    public class CommitQuest : AbstractAction
    {
        [DescAttribute("单位")]
        public UnitValue Unit = new UnitValue.Trigging();
        [QuestIDAttribute]
        [DescAttribute("任务ID")]
        public string Quest;
        [DescAttribute("参数")]
        public StringValue Args = new StringValue.VALUE("");
        public override string ToString()
        {
            return string.Format("完成任务[{0}]", Quest);
        }
        public override void DoAction(EventTriggerAdapter api, EventArguments args)
        {
            InstancePlayer p = Unit.GetValue(api, args) as InstancePlayer;
            if (p != null)
            {
                api.ZoneAPI.doCommitQuest(p, Quest, Args.GetValue(api, args));
            }
        }
    }
    [DescAttribute("放弃任务(常量)", "任务")]
    public class DropQuest : AbstractAction
    {
        [DescAttribute("单位")]
        public UnitValue Unit = new UnitValue.Trigging();
        [QuestIDAttribute]
        [DescAttribute("任务ID")]
        public string Quest;
        [DescAttribute("参数")]
        public StringValue Args = new StringValue.VALUE("");
        public override string ToString()
        {
            return string.Format("放弃任务[{0}]", Quest);
        }
        public override void DoAction(EventTriggerAdapter api, EventArguments args)
        {
            InstancePlayer p = Unit.GetValue(api, args) as InstancePlayer;
            if (p != null)
            {
                api.ZoneAPI.doDropQuest(p, Quest, Args.GetValue(api, args));
            }
        }
    }

    [DescAttribute("更新任务子状态(常量)", "任务")]
    public class UpdateQuestStatus : AbstractAction
    {
        [DescAttribute("单位")]
        public UnitValue Unit = new UnitValue.Trigging();
        [QuestIDAttribute]
        [DescAttribute("任务ID")]
        public string Quest;
        [DescAttribute("字段")]
        public StringValue Key = new StringValue.VALUE("key");
        [DescAttribute("值")]
        public StringValue Value = new StringValue.VALUE("value");
        public override string ToString()
        {
            return string.Format("更新任务[{0}]状态{1}={2}", Quest, Key, Value);
        }
        public override void DoAction(EventTriggerAdapter api, EventArguments args)
        {
            InstancePlayer p = Unit.GetValue(api, args) as InstancePlayer;
            if (p != null)
            {
                api.ZoneAPI.doUpdateQuestStatus(p, Quest, Key.GetValue(api, args), Value.GetValue(api, args));
            }
        }
    }


    [DescAttribute("接受任务(变量)", "任务")]
    public class AcceptQuestVar : AbstractAction
    {
        [DescAttribute("单位")]
        public UnitValue Unit = new UnitValue.Trigging();
        [DescAttribute("任务ID")]
        public StringValue QuestID = new TriggingQuestIdentify();
        [DescAttribute("参数")]
        public StringValue Args = new StringValue.VALUE("");
        public override string ToString()
        {
            return string.Format("接受任务[{0}]", QuestID);
        }
        public override void DoAction(EventTriggerAdapter api, EventArguments args)
        {
            InstancePlayer p = Unit.GetValue(api, args) as InstancePlayer;
            string quest_id = QuestID.GetValue(api, args);
            if (p != null && !string.IsNullOrEmpty(quest_id))
            {
                api.ZoneAPI.doAcceptQuest(p, quest_id, Args.GetValue(api, args));
            }
        }
    }

    [DescAttribute("提交完成任务(变量)", "任务")]
    public class CommitQuestVar : AbstractAction
    {
        [DescAttribute("单位")]
        public UnitValue Unit = new UnitValue.Trigging();
        [DescAttribute("任务ID")]
        public StringValue QuestID = new TriggingQuestIdentify();
        [DescAttribute("参数")]
        public StringValue Args = new StringValue.VALUE("");
        public override string ToString()
        {
            return string.Format("完成任务[{0}]", QuestID);
        }
        public override void DoAction(EventTriggerAdapter api, EventArguments args)
        {
            InstancePlayer p = Unit.GetValue(api, args) as InstancePlayer;
            string quest_id = QuestID.GetValue(api, args);
            if (p != null && !string.IsNullOrEmpty(quest_id))
            {
                api.ZoneAPI.doCommitQuest(p, quest_id, Args.GetValue(api, args));
            }
        }
    }
    [DescAttribute("放弃任务(变量)", "任务")]
    public class DropQuestVar : AbstractAction
    {
        [DescAttribute("单位")]
        public UnitValue Unit = new UnitValue.Trigging();
        [DescAttribute("任务ID")]
        public StringValue QuestID = new TriggingQuestIdentify();
        [DescAttribute("参数")]
        public StringValue Args = new StringValue.VALUE("");
        public override string ToString()
        {
            return string.Format("放弃任务[{0}]", QuestID);
        }
        public override void DoAction(EventTriggerAdapter api, EventArguments args)
        {
            InstancePlayer p = Unit.GetValue(api, args) as InstancePlayer;
            string quest_id = QuestID.GetValue(api, args);
            if (p != null && !string.IsNullOrEmpty(quest_id))
            {
                api.ZoneAPI.doDropQuest(p, quest_id, Args.GetValue(api, args));
            }
        }
    }

    [DescAttribute("更新任务子状态(变量)", "任务")]
    public class UpdateQuestStatusVar : AbstractAction
    {
        [DescAttribute("单位")]
        public UnitValue Unit = new UnitValue.Trigging();
        [DescAttribute("任务ID")]
        public StringValue QuestID = new TriggingQuestIdentify();
        [DescAttribute("字段")]
        public StringValue Key = new StringValue.VALUE("key");
        [DescAttribute("值")]
        public StringValue Value = new StringValue.VALUE("value");
        public override string ToString()
        {
            return string.Format("更新任务[{0}]状态{1}={2}", QuestID, Key, Value);
        }
        public override void DoAction(EventTriggerAdapter api, EventArguments args)
        {
            InstancePlayer p = Unit.GetValue(api, args) as InstancePlayer;
            string quest_id = QuestID.GetValue(api, args);
            if (p != null && !string.IsNullOrEmpty(quest_id))
            {
                api.ZoneAPI.doUpdateQuestStatus(p, quest_id, Key.GetValue(api, args), Value.GetValue(api, args));
            }
        }
    }
}