using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using BaseGames.UI;
using BaseGames.UI.MainMenu;
using BaseGames.UI.Theme;
using BaseGames.Core.Events;
using BaseGames.Localization;
using BaseGames.Editor.Localization;
namespace BaseGames.Editor.UI
{
///
/// 暂停界面脚手架:生成 / 更新 UI_PauseScreen 预制件 + 默认 UI_PauseMenuConfig 表 + 中英文案。
/// 对齐「Prefab(样式)+ Config(数据)+ Theme(配色)」范式。
///
/// 编辑方式:
/// 美术 → 双击 UI_PauseScreen.prefab 改暗化背景/标题/布局/按钮样式(按钮样式见 UI_MainMenu_Button);
/// 策划 → 选 UI_PauseMenuConfig.asset 增删/重排/改标签/改动作。
///
/// 菜单:BaseGames/UI/控件库/生成暂停界面(预制件 + 默认配置)
///
public static class UIPauseScreenScaffold
{
private const string PrefabDir = "Assets/_Game/Prefabs/UI";
private const string ControlsDir = "Assets/_Game/Prefabs/UI/Controls";
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_PauseScreen";
private const string ConfigName = "UI_PauseMenuConfig";
private const string BtnPrefabPath = "Assets/_Game/Prefabs/UI/Controls/UI_MainMenu_Button.prefab";
[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("[UIPauseScreen] 暂停界面已生成/更新:\n");
foreach (var r in report) sb.AppendLine(" • " + r);
sb.AppendLine("用法:重跑「BaseGames/Scene/Setup/Scaffold Persistent Scene」实例化进 Persistent(作为 PanelId.Pause 面板)。");
Debug.Log(sb.ToString());
}
// ── 预制件构建 ───────────────────────────────────────────────────────
private static void BuildPrefab(UIThemeSO theme, PauseMenuConfigSO config, List report)
{
// 根:全屏 Overlay Canvas(sortOrder 50:HUD 之上、加载/Splash 之下)
var root = new GameObject(PrefabName,
typeof(RectTransform), typeof(Canvas), typeof(CanvasScaler), typeof(GraphicRaycaster), typeof(CanvasGroup));
var canvas = root.GetComponent