using System;
using System.Collections;
using System.Collections.Generic;
using DefaultNamespace;
using DefaultNamespace.ProcessMode;
using Framework.Scripts.Runtime.Engine.Engine.Camera;
using UnityEngine;

// 添加游戏开发中常用的游戏模块的命名空间
using MotionFramework;
using MotionFramework.Console;
using MotionFramework.Event;
using MotionFramework.Scripts.Runtime.Engine.Engine.Network.WebRequest;
using MotionFramework.Utility;

public class GameLauncher : MonoBehaviour
{
    [Tooltip("在编辑器下模拟运行")]
    public bool SimulationOnEditor = true;

    void Awake()
    {
#if !UNITY_EDITOR
            SimulationOnEditor = false;
#endif

        // 初始化控制台
        if (Application.isEditor || Debug.isDebugBuild)
            DeveloperConsole.Initialize();

        
        // 初始化框架
        MotionEngine.Initialize(this, HandleMotionFrameworkLog);
    }
    void Start()
    {
        CreateGameModules();
    }
    void Update()
    {
        // 更新框架
        MotionEngine.Update();
    }
    void OnGUI()
    {
        // 绘制控制台
        if (Application.isEditor || Debug.isDebugBuild)
            DeveloperConsole.Draw();
    }

    private  void CreateGameModules()
    {
        // 创建事件管理器
        MotionEngine.CreateModule<EventManager>();

        //webrequest管理器
        MotionEngine.CreateModule<WebRequestManager>();
        MotionEngine.CreateModule<DataConfigManager>();
        //流程管理器
        MotionEngine.CreateModule<ProcessManager>();
        
        
        
        MotionEngine.GetModule<ProcessManager>().InitializeFirstStep();
        
        
    }

    private void HandleMotionFrameworkLog(ELogLevel logLevel, string log)
    {
        if (logLevel == ELogLevel.Log)
        {
            UnityEngine.Debug.Log(log);
        }
        else if (logLevel == ELogLevel.Error)
        {
            UnityEngine.Debug.LogError(log);
        }
        else if (logLevel == ELogLevel.Warning)
        {
            UnityEngine.Debug.LogWarning(log);
        }
        else if (logLevel == ELogLevel.Exception)
        {
            UnityEngine.Debug.LogError(log);
        }
        else
        {
            throw new NotImplementedException($"{logLevel}");
        }
    }
}