using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using BaseGames.UI;
using BaseGames.UI.Theme;
using BaseGames.Core.Events;
using BaseGames.Localization;
using BaseGames.Editor.Localization;
namespace BaseGames.Editor.UI
{
///
/// 加载界面脚手架:一键生成 / 更新 UI_LoadingScreen 预制件 + 默认 UI_LoadingConfig 数据表,
/// 并补充默认中/英文案。对齐项目「Prefab(样式/美术)+ Config(数据)+ Theme(配色)」范式。
///
/// 生成后策划美术编辑方式:
///
/// - 美术:双击 UI_LoadingScreen.prefab 进 Prefab Mode,改背景图 / 进度条 sprite / 字体 / 加装饰 / 调布局。
/// - 策划:选 UI_LoadingConfig.asset,改提示文案 key、标题 key、加载时长/手感。
/// - 配色:改 UI_Theme_Default(带 UIThemeRole 的元素自动套用)。
///
///
/// 菜单:BaseGames/UI/控件库/生成加载界面(预制件 + 默认配置)
///
public static class UILoadingScreenScaffold
{
private const string PrefabDir = "Assets/_Game/Prefabs/UI";
private const string ConfigDir = "Assets/_Game/Data/UI";
private const string ThemePath = "Assets/_Game/Data/UI/Themes/UI_Theme_Default.asset";
private const string PrefabName = "UI_LoadingScreen";
private const string ConfigName = "UI_LoadingConfig";
[MenuItem("BaseGames/UI/控件库/生成加载界面(预制件 + 默认配置)")]
public static void GeneratePrefab()
{
EnsureFolder(PrefabDir);
EnsureFolder(ConfigDir);
var report = new List();
var theme = AssetDatabase.LoadAssetAtPath(ThemePath);
var config = EnsureDefaultConfig(report);
SeedLocalization(report);
BuildPrefab(theme, config, report);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
var sb = new System.Text.StringBuilder("[UILoadingScreen] 加载界面已生成/更新:\n");
foreach (var r in report) sb.AppendLine(" • " + r);
sb.AppendLine("用法:重跑「BaseGames/Scene/Setup/Scaffold Persistent Scene」把预制件实例化进 Persistent。");
sb.AppendLine("美术改样式 → 编辑 UI_LoadingScreen 预制件;策划改内容 → 编辑 UI_LoadingConfig;配色 → UI_Theme_Default。");
Debug.Log(sb.ToString());
}
// ── 预制件构建 ───────────────────────────────────────────────────────
private static void BuildPrefab(UIThemeSO theme, LoadingScreenConfigSO config, List report)
{
// 根:全屏 Overlay Canvas(常驻 active;LoadingScreenManager 挂此处,靠保持 active 才能订阅事件)
var root = new GameObject(PrefabName,
typeof(RectTransform), typeof(Canvas), typeof(CanvasScaler), typeof(GraphicRaycaster));
var canvas = root.GetComponent