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

namespace CommonAI.Zone.ZoneEditor.EventTrigger
{

    [DescAttribute("Flag")]
    public abstract class FlagValue : AbstractValue<InstanceFlag>
    {
        [DescAttribute("值 - 没有Flag", "值")]
        public class NA : FlagValue
        {
            public override string ToString()
            {
                return "没有Flag";
            }
            public override InstanceFlag GetValue(IEditorValueAdapter api, EventArguments args)
            {
                return null;
            }
        }

        //---------------------------------------------------------------------------------------
        #region Editor

        [DescAttribute("编辑器 - 区域", "编辑器")]
        public class EditorRegion : FlagValue
        {
            [DescAttribute("场景中的名字")]
            [SceneObjectIDAttribute(typeof(RegionData))]
            public string EditorName;
            public override string ToString()
            {
                return "区域:" + EditorName;
            }
            public override InstanceFlag GetValue(IEditorValueAdapter api, EventArguments args)
            {
                return api.ZoneAPI.get_edit_flag(EditorName) as ZoneRegion;
            }
        }

        [DescAttribute("编辑器 - 路点", "编辑器")]
        public class EditorPoint : FlagValue
        {
            [DescAttribute("场景中的名字")]
            [SceneObjectIDAttribute(typeof(PointData))]
            public string EditorName;
            public override string ToString()
            {
                return "路点:" + EditorName;
            }
            public override InstanceFlag GetValue(IEditorValueAdapter api, EventArguments args)
            {
                return api.ZoneAPI.get_edit_flag(EditorName) as ZoneWayPoint;
            }
        }

        [DescAttribute("编辑器 - 装饰物", "编辑器")]
        public class EditorDecoration : FlagValue
        {
            [DescAttribute("场景中的名字")]
            [SceneObjectIDAttribute(typeof(DecorationData))]
            public string EditorName;
            public override string ToString()
            {
                return "装饰物:" + EditorName;
            }
            public override InstanceFlag GetValue(IEditorValueAdapter api, EventArguments args)
            {
                return api.ZoneAPI.get_edit_flag(EditorName) as ZoneDecoration;
            }
        }


        [DescAttribute("编辑器 - Area", "编辑器")]
        public class EditorArea : FlagValue
        {
            [DescAttribute("场景中的名字")]
            [SceneObjectIDAttribute(typeof(AreaData))]
            public string EditorName;
            public override string ToString()
            {
                return "Area:" + EditorName;
            }
            public override InstanceFlag GetValue(IEditorValueAdapter api, EventArguments args)
            {
                return api.ZoneAPI.get_edit_flag(EditorName) as ZoneArea;
            }
        }

        #endregion
        //---------------------------------------------------------------------------------------
        #region Trigging

        [DescAttribute("功能 - 触发的区域", "功能")]
        public class TriggingRegion : FlagValue
        {
            public override string ToString()
            {
                return "触发的区域";
            }
            public override InstanceFlag GetValue(IEditorValueAdapter api, EventArguments args)
            {
                return args.TriggingRegion;
            }
        }
        [DescAttribute("功能 - 触发的装饰物", "功能")]
        public class TriggingDecoration : FlagValue
        {
            public override string ToString()
            {
                return "触发的装饰物";
            }
            public override InstanceFlag GetValue(IEditorValueAdapter api, EventArguments args)
            {
                return args.TriggingDecoration;
            }
        }
        [DescAttribute("功能 - 触发的Area", "功能")]
        public class TriggingArea : FlagValue
        {
            public override string ToString()
            {
                return "触发的Area";
            }
            public override InstanceFlag GetValue(IEditorValueAdapter api, EventArguments args)
            {
                return args.TriggingArea;
            }
        }

        #endregion
        //---------------------------------------------------------------------------------------
        #region Field


        [DescAttribute("单位当前Area", "Area")]
        public class UnitCurrentArea : FlagValue
        {
            [DescAttribute("单位")]
            public UnitValue Unit = new UnitValue.Trigging();

            public override string ToString()
            {
                return string.Format("单位({0})当前Area", Unit);
            }
            public override InstanceFlag GetValue(IEditorValueAdapter api, EventArguments args)
            {
                var unit = Unit.GetValue(api, args);
                if (unit != null)
                {
                    return unit.CurrentArea;
                }
                return null;
            }
        }

        [DescAttribute("坐标所在Area", "Area")]
        public class PositionArea : FlagValue
        {
            [DescAttribute("坐标")]
            public PositionValue Pos = new PositionValue.VALUE();

            public override string ToString()
            {
                return string.Format("坐标({0})位置Area", Pos);
            }
            public override InstanceFlag GetValue(IEditorValueAdapter api, EventArguments args)
            {
                var pos = Pos.GetValue(api, args);
                if (pos != null)
                {
                    return api.ZoneAPI.GetArea(pos.X, pos.Y);
                }
                return null;
            }
        }

        #endregion
        //---------------------------------------------------------------------------------------
    }

}