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

namespace CommonAI.Zone.ZoneEditor.EventTrigger
{

    [DescAttribute("场景物品")]
    public abstract class ItemValue : AbstractValue<InstanceItem>
    {
        [DescAttribute("值 - 没有场景物品", "值")]
        public class NA : ItemValue
        {
            public override string ToString()
            {
                return "没有物品";
            }
            public override InstanceItem GetValue(IEditorValueAdapter api, EventArguments args)
            {
                return null;
            }
        }

        [DescAttribute("功能 - 触发的场景物品", "功能")]
        public class Trigging : ItemValue
        {
            public override string ToString()
            {
                return "触发的场景物品";
            }
            public override InstanceItem GetValue(IEditorValueAdapter api, EventArguments args)
            {
                return args.TriggingItem;
            }
        }

        [DescAttribute("功能 - 最后产生的场景物品", "功能")]
        public class LastCreated : ItemValue
        {
            public override string ToString()
            {
                return "最后产生的物品";
            }
            public override InstanceItem GetValue(IEditorValueAdapter api, EventArguments args)
            {
                return api.ZoneAPI.LastCreatedInstanceItem;
            }
        }

        [DescAttribute("单位最后从场景检取的场景物品", "功能")]
        public class LastGotInstance : ItemValue
        {
            public override string ToString()
            {
                return string.Format("单位最后从场景检取物品");
            }
            public override InstanceItem GetValue(IEditorValueAdapter api, EventArguments args)
            {
                return api.ZoneAPI.LastUnitGotInstanceItem;
            }
        }


        [DescAttribute("检取中的场景物品", "功能")]
        public class LastPickingInstance : ItemValue
        {
            public override string ToString()
            {
                return string.Format("检取中的场景物品");
            }
            public override InstanceItem GetValue(IEditorValueAdapter api, EventArguments args)
            {
                return api.ZoneAPI.LastPickingItem;
            }
        }

        [DescAttribute("指定名字的场景物品", "功能")]
        public class NamedItem : ItemValue
        {
            [DescAttribute("名字")]
            public StringValue Name = new StringValue.VALUE();
            public override string ToString()
            {
                return string.Format("名字为\"{0}\"的场景物品", Name);
            }
            public override InstanceItem GetValue(IEditorValueAdapter api, EventArguments args)
            {
                return api.ZoneAPI.getItemByName(Name.GetValue(api, args));
            }
        }


        [DescAttribute("遍历迭代中的场景物品", "循环迭代")]
        public class PickingIteratingItem : ItemValue
        {
            public override string ToString()
            {
                return "遍历迭代中的场景物品";
            }
            public override InstanceItem GetValue(IEditorValueAdapter api, EventArguments args)
            {
                return args.IteratingItem;
            }
        }
    }

}