// using GameFramework.Procedure;
// using UnityEngine;
// using System.Collections.Generic;

// namespace CrazyMaple
// {
//     /// <summary>
//     /// ProcedurePreload中使用ArtResourceManager的示例代码
//     /// 展示正确的初始化顺序和等待机制
//     /// </summary>
//     public class ProcedurePreloadExample : ProcedureBase
//     {
//         private Dictionary<string, bool> m_LoadedFlag = new Dictionary<string, bool>();

//         protected override void OnEnter(GameFramework.Fsm.IFsm<IProcedureManager> procedureOwner)
//         {
//             base.OnEnter(procedureOwner);

//             m_LoadedFlag.Clear();

//             // 按顺序预加载资源
//             PreloadResourcesInOrder();
//         }

//         /// <summary>
//         /// 按正确顺序预加载资源
//         /// </summary>
//         private void PreloadResourcesInOrder()
//         {
//             // ===== 步骤1: 初始化ArtResourceManager =====
//             m_LoadedFlag["ArtResourceManager"] = false;
//             Debug.Log("[ProcedurePreload] 步骤1: 开始初始化 ArtResourceManager...");
            
//             ArtResourceManager.Instance.Initialize(success =>
//             {
//                 if (success)
//                 {
//                     Debug.Log("[ProcedurePreload] ✓ ArtResourceManager 初始化成功");
//                     m_LoadedFlag["ArtResourceManager"] = true;
                    
//                     // 初始化成功后，开始加载其他资源
//                     PreloadOtherResources();
//                 }
//                 else
//                 {
//                     Debug.LogError("[ProcedurePreload] ✗ ArtResourceManager 初始化失败");
//                     m_LoadedFlag["ArtResourceManager"] = true; // 设置为true避免卡住，但应该跳转到错误流程
//                 }
//             });
//         }

//         /// <summary>
//         /// ArtResourceManager初始化完成后，加载其他资源
//         /// </summary>
//         private void PreloadOtherResources()
//         {
//             Debug.Log("[ProcedurePreload] 步骤2: ArtResourceManager已就绪，开始加载业务资源...");
            
//             // ===== 步骤2: 加载AtlasMapping（原有逻辑） =====
//             PreloadAtlasMapping();
            
//             // ===== 步骤3: 加载RuntimeFont（原有逻辑） =====
//             PreloadRuntimeFonts();
            
//             // ===== 步骤4: 加载AllConfigs（原有逻辑） =====
//             PreloadConfigs();
            
//             // ===== 步骤5: 预加载美术资源表（新增，可选） =====
//             PreloadArtTables();
//         }

//         /// <summary>
//         /// 预加载配置文件
//         /// </summary>
//         private void PreloadConfigs()
//         {
//             m_LoadedFlag["AllConfigs"] = false;
//             Debug.Log("[ProcedurePreload] 开始加载 AllConfigs...");
            
//             ConfigManager.Instance.PreloadAllConfigs(() =>
//             {
//                 Debug.Log("[ProcedurePreload] ✓ AllConfigs 加载完成，开始加载 DataTables");
                
//                 // 在配置加载完成后再初始化DataTable
//                 PreloadDataTables();
                
//                 // 在 DataTable 加载完成后，刷新 PlayerProfileData 的数据表引用
//                 Debug.Log("[ProcedurePreload] 刷新 PlayerProfileData 数据表引用");
//                 PlayerProfileData.Instance.LoadData();
//                 PlayerProfileData.Instance.MainDecoratePanelTempFirst = true;
                
//                 // 设置加载完成标志
//                 m_LoadedFlag["AllConfigs"] = true;
//                 Debug.Log("[ProcedurePreload] ✓ AllConfigs 和 DataTables 全部加载完成");
//             });
//         }

//         /// <summary>
//         /// 预加载美术资源表（示例）
//         /// 注意：manifest中配置的表会自动加载，这里演示手动加载特定表
//         /// </summary>
//         private void PreloadArtTables()
//         {
//             // 如果在manifest中配置了preloadTableIds，这些表会自动加载
//             // 这里演示额外手动加载某些关键表
            
//             // 示例1：按表ID加载
//             int loginUITableId = 1001; // 假设这是登录界面的美术资源表ID
//             if (ArtResourceManager.Instance.HasTable(loginUITableId))
//             {
//                 string flagKey = $"ArtTable_{loginUITableId}";
//                 m_LoadedFlag[flagKey] = false;
                
//                 Debug.Log($"[ProcedurePreload] 开始预加载美术资源表 {loginUITableId}...");
//                 ArtResourceManager.Instance.LoadTable(loginUITableId, success =>
//                 {
//                     if (success)
//                     {
//                         Debug.Log($"[ProcedurePreload] ✓ 美术资源表 {loginUITableId} 预加载成功");
//                     }
//                     else
//                     {
//                         Debug.LogWarning($"[ProcedurePreload] ✗ 美术资源表 {loginUITableId} 预加载失败");
//                     }
//                     m_LoadedFlag[flagKey] = true;
//                 });
//             }
            
//             // 示例2：按表名称加载
//             string mainMenuTableName = "MainMenuUI"; // 假设这是主菜单的美术资源表名称
//             if (ArtResourceManager.Instance.HasTable(mainMenuTableName))
//             {
//                 string flagKey = $"ArtTable_{mainMenuTableName}";
//                 m_LoadedFlag[flagKey] = false;
                
//                 Debug.Log($"[ProcedurePreload] 开始预加载美术资源表 '{mainMenuTableName}'...");
//                 ArtResourceManager.Instance.LoadTableByName(mainMenuTableName, success =>
//                 {
//                     if (success)
//                     {
//                         Debug.Log($"[ProcedurePreload] ✓ 美术资源表 '{mainMenuTableName}' 预加载成功");
//                     }
//                     else
//                     {
//                         Debug.LogWarning($"[ProcedurePreload] ✗ 美术资源表 '{mainMenuTableName}' 预加载失败");
//                     }
//                     m_LoadedFlag[flagKey] = true;
//                 });
//             }
//         }

//         /// <summary>
//         /// 原有的PreloadAtlasMapping实现（保持不变）
//         /// </summary>
//         private void PreloadAtlasMapping()
//         {
//             // 你的原有实现...
//             m_LoadedFlag["AtlasMapping"] = false;
//             Debug.Log("[ProcedurePreload] 加载 AtlasMapping...");
            
//             // ... 原有加载逻辑 ...
            
//             // 模拟加载完成
//             m_LoadedFlag["AtlasMapping"] = true;
//         }

//         /// <summary>
//         /// 原有的PreloadRuntimeFonts实现（保持不变）
//         /// </summary>
//         private void PreloadRuntimeFonts()
//         {
//             // 你的原有实现...
//             m_LoadedFlag["RuntimeFont"] = false;
//             Debug.Log("[ProcedurePreload] 加载 RuntimeFont...");
            
//             // ... 原有加载逻辑 ...
            
//             // 模拟加载完成
//             m_LoadedFlag["RuntimeFont"] = true;
//         }

//         /// <summary>
//         /// 原有的PreloadDataTables实现（保持不变）
//         /// </summary>
//         private void PreloadDataTables()
//         {
//             // 你的原有实现...
//             Debug.Log("[ProcedurePreload] 加载 DataTables...");
//         }

//         protected override void OnUpdate(GameFramework.Fsm.IFsm<IProcedureManager> procedureOwner, float elapseSeconds, float realElapseSeconds)
//         {
//             base.OnUpdate(procedureOwner, elapseSeconds, realElapseSeconds);

//             // 检查所有资源是否加载完成
//             foreach (var loadedFlag in m_LoadedFlag)
//             {
//                 if (!loadedFlag.Value)
//                 {
//                     // Debug.Log($"[ProcedurePreload] 等待加载: {loadedFlag.Key}");
//                     return;
//                 }
//             }

//             // 所有资源加载完成，切换到下一个流程
//             Debug.Log("[ProcedurePreload] ✓ 所有资源加载完成，切换到 ProcedureMenu");
//             ChangeState<ProcedureMenu>(procedureOwner);
//         }

//         protected override void OnLeave(GameFramework.Fsm.IFsm<IProcedureManager> procedureOwner, bool isShutdown)
//         {
//             base.OnLeave(procedureOwner, isShutdown);
//         }
//     }

//     #region ===== 运行时使用示例 =====
    
//     /// <summary>
//     /// 运行时使用ArtResourceManager的示例
//     /// </summary>
//     public class ArtResourceUsageExample
//     {
//         /// <summary>
//         /// 示例1：加载单个Sprite资源
//         /// </summary>
//         public void LoadSpriteExample()
//         {
//             // 方式1：通过 表ID + 资源ID
//             ArtResourceManager.Instance.LoadSprite(1001, 1, sprite =>
//             {
//                 if (sprite != null)
//                 {
//                     Debug.Log("Sprite加载成功");
//                     // 使用sprite...
//                 }
//             });
            
//             // 方式2：通过 表ID + 资源名称
//             ArtResourceManager.Instance.LoadSprite(1001, "icon_coin", sprite =>
//             {
//                 if (sprite != null)
//                 {
//                     Debug.Log("Sprite加载成功");
//                     // 使用sprite...
//                 }
//             });
            
//             // 方式3：通过 表名称 + 资源ID
//             ArtResourceManager.Instance.LoadSprite("UICommon", 1, sprite =>
//             {
//                 if (sprite != null)
//                 {
//                     Debug.Log("Sprite加载成功");
//                     // 使用sprite...
//                 }
//             });
            
//             // 方式4：通过 表名称 + 资源名称
//             ArtResourceManager.Instance.LoadSprite("UICommon", "icon_coin", sprite =>
//             {
//                 if (sprite != null)
//                 {
//                     Debug.Log("Sprite加载成功");
//                     // 使用sprite...
//                 }
//             });
//         }

//         /// <summary>
//         /// 示例2：加载Spine资源
//         /// </summary>
//         public void LoadSpineExample()
//         {
//             // 返回Spine资源和动画名称
//             ArtResourceManager.Instance.LoadSpine("Character", "hero_idle", (spineAsset, animName) =>
//             {
//                 if (spineAsset != null)
//                 {
//                     Debug.Log($"Spine加载成功，默认动画: {animName}");
//                     // 使用spineAsset和animName...
//                 }
//             });
//         }

//         /// <summary>
//         /// 示例3：获取Spine动画名称（不加载资源）
//         /// </summary>
//         public void GetSpineAnimNameExample()
//         {
//             string animName = ArtResourceManager.Instance.GetSpineAnimName("Character", "hero_idle");
//             Debug.Log($"动画名称: {animName}");
//         }

//         /// <summary>
//         /// 示例4：预加载整个资源表
//         /// </summary>
//         public void PreloadTableExample()
//         {
//             ArtResourceManager.Instance.LoadTable(1001, success =>
//             {
//                 if (success)
//                 {
//                     Debug.Log("资源表预加载成功");
//                     // 之后LoadSprite会从缓存中直接返回
//                 }
//             });
//         }

//         /// <summary>
//         /// 示例5：检查资源表是否存在
//         /// </summary>
//         public void CheckTableExample()
//         {
//             if (ArtResourceManager.Instance.HasTable("UICommon"))
//             {
//                 Debug.Log("UICommon表存在");
//             }
            
//             if (ArtResourceManager.Instance.IsInitialized)
//             {
//                 Debug.Log("ArtResourceManager已初始化");
//             }
//         }
//     }
    
//     #endregion
// }
