using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.IO;
using CommonAI.Zone.ZoneEditor;
using GameEditorPlugin.Win32.Runtime;

namespace CommonAIEditor
{
    public interface IGameEditorPlugin
    {
        string Name { get; }

        /// <summary>
        /// 编辑器入口
        /// </summary>
        string DataRoot { get; set; }

        /// <summary>
        /// 游戏扩展DLL
        /// </summary>
        string PluginDLL { get; set; }

        /// <summary>
        /// 构造场景编辑器插件
        /// </summary>
        /// <param name="default_plugin"></param>
        /// <returns></returns>
        ISceneEditorPlugin CreateScenePlugin(IGameEditorPlugin default_plugin);

        /// <summary>
        /// 运行游戏测试
        /// </summary>
        /// <param name="default_plugin"></param>
        /// <param name="data_dir"></param>
        /// <param name="sceneID"></param>
        /// <param name="actorTemplateID"></param>
        void RunTest(IGameEditorPlugin default_plugin, string data_dir, int sceneID, int actorTemplateID);

        /// <summary>
        /// 运行资源查看功能
        /// </summary>
        /// <param name="default_plugin"></param>
        /// <param name="filepath"></param>
        void RunModelView(IGameEditorPlugin default_plugin, string[] filepath);

        /// <summary>
        /// 可接受的资源类型
        /// </summary>
        /// <param name="default_plugin"></param>
        /// <param name="filename"></param>
        /// <returns></returns>
        bool AcceptResource(IGameEditorPlugin default_plugin, string filename);

        /// <summary>
        /// 构造Win32测试工具
        /// </summary>
        /// <param name="default_plugin"></param>
        /// <param name="data_dir"></param>
        /// <param name="sceneID"></param>
        /// <param name="recorder"></param>
        /// <returns></returns>
        void RunLocalPlay(IGameEditorPlugin default_plugin, DirectoryInfo data_dir, int sceneID, bool recorder);

        /// <summary>
        /// 构造Win32测试工具
        /// </summary>
        /// <param name="default_plugin"></param>
        /// <param name="data_dir"></param>
        /// <param name="sceneID"></param>
        /// <returns></returns>
        void RunServerPlay(IGameEditorPlugin default_plugin, DirectoryInfo data_dir, int sceneID);
    }


    public delegate void PluginMessageHandler(object data);
    public delegate SceneObjectData CallAddSceneObject(Type type, Action<SceneObjectData> callback);
    public delegate SceneObjectData CallResetSceneObject(string name, Action<SceneObjectData> callback);

    public interface ISceneEditorPlugin
    {
        bool EnableRight { get; }

        Control AsControl();

        void SendMessage(object data);

        event PluginMessageHandler OnGetPluginMessage;

        event CallAddSceneObject CallAddObject;

        event CallResetSceneObject CallResetObject;
    }

}