using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using Newtonsoft.Json;
using MotionFramework;
namespace Zion.ERP.Inventory
{
///
/// API配置管理器,负责统一管理API接口配置
///
public class ApiConfigManager : ModuleSingleton, IModule
{
///
/// 当前配置数据
///
private ApiConfigData _currentConfig;
///
/// ScriptableObject配置(已废弃)
///
private ApiConfig _scriptableConfig = null;
///
/// JSON配置文件路径
///
private string _jsonConfigPath;
///
/// 配置文件最后修改时间
///
private DateTime _lastConfigModifyTime;
///
/// 是否启用热重载
///
private bool _enableHotReload = false;
///
/// 热重载检查间隔
///
private float _hotReloadInterval = 30f;
///
/// 上次热重载检查时间
///
private float _lastHotReloadCheck = 0f;
///
/// 配置加载完成事件
///
public event Action OnConfigLoaded;
///
/// 配置重载事件
///
public event Action OnConfigReloaded;
///
/// 配置错误事件
///
public event Action OnConfigError;
///
/// 获取当前配置
///
public ApiConfigData CurrentConfig => _currentConfig;
///
/// 获取ScriptableObject配置(已废弃)
///
public ApiConfig ScriptableConfig => null;
///
/// 是否已初始化
///
public bool IsInitialized { get; private set; } = false;
///
/// 模块创建时调用
///
public void OnCreate(object createParam)
{
Debug.Log("API配置管理器创建成功");
}
///
/// 初始化配置管理器
///
/// 是否启用热重载
/// 热重载检查间隔
public void Initialize(bool enableHotReload = false, float hotReloadInterval = 30f)
{
Debug.Log("开始初始化API配置管理器");
_enableHotReload = enableHotReload;
_hotReloadInterval = hotReloadInterval;
// 设置JSON配置文件路径
_jsonConfigPath = Path.Combine(Application.streamingAssetsPath, "DataConfig", "api_config.json");
// 加载配置
LoadConfig();
IsInitialized = true;
Debug.Log("API配置管理器初始化完成");
}
///
/// 加载配置
///
public void LoadConfig()
{
try
{
// 只从JSON文件加载配置
if (File.Exists(_jsonConfigPath))
{
LoadFromJson();
}
else
{
Debug.LogError($"API配置文件不存在:{_jsonConfigPath}");
OnConfigError?.Invoke($"API配置文件不存在:{_jsonConfigPath}");
return;
}
// 验证配置
if (_currentConfig == null || !_currentConfig.Validate())
{
Debug.LogError("API配置验证失败");
OnConfigError?.Invoke("API配置验证失败");
return;
}
// 记录配置文件修改时间
_lastConfigModifyTime = File.GetLastWriteTime(_jsonConfigPath);
Debug.Log($"API配置加载成功,当前环境:{_currentConfig.CurrentEnvironment}");
OnConfigLoaded?.Invoke(_currentConfig);
}
catch (Exception ex)
{
Debug.LogError($"加载API配置失败:{ex.Message}");
OnConfigError?.Invoke($"加载API配置失败:{ex.Message}");
}
}
///
/// 从JSON文件加载配置
///
private void LoadFromJson()
{
Debug.Log($"从JSON文件加载配置:{_jsonConfigPath}");
string jsonContent = File.ReadAllText(_jsonConfigPath);
_currentConfig = JsonConvert.DeserializeObject(jsonContent);
Debug.Log("JSON配置文件加载成功");
}
///
/// 创建默认配置
///
private void CreateDefaultConfig()
{
Debug.LogError("未找到API配置文件,请确保配置文件存在:api_config.json");
_currentConfig = null;
}
///
/// 保存配置到JSON文件
///
public void SaveConfigToJson()
{
try
{
if (_currentConfig == null)
{
Debug.LogError("没有可保存的配置数据");
return;
}
// 确保目录存在
string directory = Path.GetDirectoryName(_jsonConfigPath);
if (!Directory.Exists(directory))
{
Directory.CreateDirectory(directory);
}
// 序列化并保存
string jsonContent = JsonConvert.SerializeObject(_currentConfig, Formatting.Indented);
File.WriteAllText(_jsonConfigPath, jsonContent);
Debug.Log($"API配置已保存到:{_jsonConfigPath}");
}
catch (Exception ex)
{
Debug.LogError($"保存API配置失败:{ex.Message}");
OnConfigError?.Invoke($"保存API配置失败:{ex.Message}");
}
}
///
/// 获取API接口URL
///
/// 接口名称
/// 动态参数
/// 完整的URL
public string GetApiUrl(string endpointName, Dictionary dynamicParams = null)
{
if (_currentConfig == null)
{
Debug.LogError("API配置未初始化");
return "";
}
var endpoint = _currentConfig.GetEndpoint(endpointName);
if (endpoint == null)
{
Debug.LogError($"未找到API接口配置:{endpointName}");
return "";
}
var envConfig = _currentConfig.GetCurrentEnvironmentConfig();
if (envConfig == null)
{
Debug.LogError("未找到当前环境配置");
return "";
}
return endpoint.GetFullUrl(envConfig.BaseUrl, dynamicParams);
}
///
/// 获取API接口配置
///
/// 接口名称
/// API接口配置
public ApiEndpoint GetEndpoint(string endpointName)
{
return _currentConfig?.GetEndpoint(endpointName);
}
///
/// 获取当前环境配置
///
/// 当前环境配置
public ApiEnvironmentConfig GetCurrentEnvironmentConfig()
{
return _currentConfig?.GetCurrentEnvironmentConfig();
}
///
/// 切换环境
///
/// 目标环境
public void SwitchEnvironment(ApiEnvironment environment)
{
if (_currentConfig == null)
{
Debug.LogError("API配置未初始化");
return;
}
var envConfig = _currentConfig.Environments.Find(e => e.Environment == environment);
if (envConfig == null)
{
Debug.LogError($"未找到环境配置:{environment}");
return;
}
if (!envConfig.IsEnabled)
{
Debug.LogWarning($"环境 {environment} 未启用");
return;
}
_currentConfig.CurrentEnvironment = environment;
Debug.Log($"已切换到环境:{environment}");
// 保存配置
SaveConfigToJson();
}
///
/// 检查配置是否需要重载
///
private void CheckConfigReload()
{
if (!_enableHotReload || !File.Exists(_jsonConfigPath))
return;
try
{
DateTime currentModifyTime = File.GetLastWriteTime(_jsonConfigPath);
if (currentModifyTime > _lastConfigModifyTime)
{
Debug.Log("检测到配置文件变更,开始重载配置");
LoadConfig();
OnConfigReloaded?.Invoke(_currentConfig);
}
}
catch (Exception ex)
{
Debug.LogError($"检查配置重载时发生错误:{ex.Message}");
}
}
///
/// 模块更新时调用
///
public void OnUpdate()
{
// 检查热重载
if (_enableHotReload && Time.time - _lastHotReloadCheck > _hotReloadInterval)
{
_lastHotReloadCheck = Time.time;
CheckConfigReload();
}
}
///
/// 模块销毁时调用
///
public void OnDestroy()
{
Debug.Log("API配置管理器销毁");
}
///
/// 模块GUI绘制时调用
///
public void OnGUI()
{
// 可以在这里添加调试信息显示
}
}
}