diff --git a/Assets/Editor/CardSystem/CardSystemTesterWindow.cs b/Assets/Editor/CardSystem/CardSystemTesterWindow.cs
new file mode 100644
index 00000000..b3ccd0b3
--- /dev/null
+++ b/Assets/Editor/CardSystem/CardSystemTesterWindow.cs
@@ -0,0 +1,369 @@
+using UnityEditor;
+using UnityEngine;
+using AppleHills.Data.CardSystem;
+using Data.CardSystem;
+using Core;
+using UI.CardSystem;
+using UnityEngine.UI;
+using System.Collections.Generic;
+
+namespace Editor.CardSystem
+{
+ ///
+ /// Editor window for testing the Card System in play mode.
+ /// Provides buttons to test core functionalities like adding booster packs, opening packs, and generating cards.
+ ///
+ public class CardSystemTesterWindow : EditorWindow
+ {
+ // Test Settings
+ private int boosterPacksToAdd = 3;
+ private int cardsToGenerate = 10;
+ private bool autoOpenPacksWhenAdded = false;
+
+ // Debug Info
+ private int currentBoosterCount;
+ private int totalCardsInCollection;
+ private string lastActionMessage = "";
+
+ // UI State
+ private Vector2 scrollPosition;
+ private CardAlbumUI cachedCardAlbumUI;
+
+ [MenuItem("AppleHills/Card System Tester")]
+ public static void ShowWindow()
+ {
+ var window = GetWindow(false, "Card System Tester", true);
+ window.minSize = new Vector2(400, 500);
+ }
+
+ private void OnEnable()
+ {
+ EditorApplication.playModeStateChanged += OnPlayModeStateChanged;
+ }
+
+ private void OnDisable()
+ {
+ EditorApplication.playModeStateChanged -= OnPlayModeStateChanged;
+ }
+
+ private void OnPlayModeStateChanged(PlayModeStateChange state)
+ {
+ if (state == PlayModeStateChange.EnteredPlayMode)
+ {
+ cachedCardAlbumUI = null;
+ RefreshDebugInfo();
+ }
+ else if (state == PlayModeStateChange.ExitingPlayMode)
+ {
+ cachedCardAlbumUI = null;
+ lastActionMessage = "";
+ }
+
+ Repaint();
+ }
+
+ private void OnGUI()
+ {
+ scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition);
+
+ // Header
+ EditorGUILayout.Space(10);
+ EditorGUILayout.LabelField("Card System Tester", EditorStyles.boldLabel);
+ EditorGUILayout.HelpBox("This tool allows you to test the card system in play mode. " +
+ "Enter play mode to enable the testing functions.", MessageType.Info);
+
+ EditorGUILayout.Space(10);
+
+ // Test Settings Section
+ DrawTestSettings();
+
+ EditorGUILayout.Space(10);
+
+ // Debug Info Section
+ DrawDebugInfo();
+
+ EditorGUILayout.Space(10);
+
+ // Test Actions Section
+ DrawTestActions();
+
+ EditorGUILayout.EndScrollView();
+ }
+
+ private void DrawTestSettings()
+ {
+ EditorGUILayout.LabelField("Test Settings", EditorStyles.boldLabel);
+
+ EditorGUI.BeginDisabledGroup(!Application.isPlaying);
+
+ boosterPacksToAdd = EditorGUILayout.IntSlider("Booster Packs to Add", boosterPacksToAdd, 1, 10);
+ cardsToGenerate = EditorGUILayout.IntSlider("Cards to Generate", cardsToGenerate, 1, 100);
+ autoOpenPacksWhenAdded = EditorGUILayout.Toggle("Auto-Open Packs When Added", autoOpenPacksWhenAdded);
+
+ EditorGUI.EndDisabledGroup();
+ }
+
+ private void DrawDebugInfo()
+ {
+ EditorGUILayout.LabelField("Debug Info", EditorStyles.boldLabel);
+
+ if (Application.isPlaying)
+ {
+ EditorGUI.BeginDisabledGroup(true);
+ EditorGUILayout.IntField("Current Booster Count", currentBoosterCount);
+ EditorGUILayout.IntField("Total Cards in Collection", totalCardsInCollection);
+ EditorGUI.EndDisabledGroup();
+
+ if (!string.IsNullOrEmpty(lastActionMessage))
+ {
+ EditorGUILayout.Space(5);
+ EditorGUILayout.HelpBox(lastActionMessage, MessageType.None);
+ }
+
+ EditorGUILayout.Space(5);
+ if (GUILayout.Button("Refresh Debug Info"))
+ {
+ RefreshDebugInfo();
+ }
+ }
+ else
+ {
+ EditorGUILayout.HelpBox("Debug info available in play mode.", MessageType.Warning);
+ }
+ }
+
+ private void DrawTestActions()
+ {
+ EditorGUILayout.LabelField("Test Actions", EditorStyles.boldLabel);
+
+ if (!Application.isPlaying)
+ {
+ EditorGUILayout.HelpBox("Enter Play Mode to use these testing functions.", MessageType.Warning);
+ return;
+ }
+
+ // Booster Pack Actions
+ EditorGUILayout.Space(5);
+ EditorGUILayout.LabelField("Booster Pack Actions", EditorStyles.miniBoldLabel);
+
+ if (GUILayout.Button("Add Booster Packs", GUILayout.Height(30)))
+ {
+ AddBoosterPacks();
+ }
+
+ if (GUILayout.Button("Open Card Menu", GUILayout.Height(30)))
+ {
+ SimulateBackpackClick();
+ }
+
+ if (GUILayout.Button("Open Booster Pack", GUILayout.Height(30)))
+ {
+ OpenBoosterPack();
+ }
+
+ if (GUILayout.Button("Open Album View", GUILayout.Height(30)))
+ {
+ OpenAlbumView();
+ }
+
+ // Card Generation Actions
+ EditorGUILayout.Space(10);
+ EditorGUILayout.LabelField("Card Generation Actions", EditorStyles.miniBoldLabel);
+
+ if (GUILayout.Button("Generate Random Cards", GUILayout.Height(30)))
+ {
+ GenerateRandomCards();
+ }
+
+ EditorGUILayout.Space(5);
+
+ // Danger Zone
+ EditorGUILayout.Space(10);
+ EditorGUILayout.LabelField("Danger Zone", EditorStyles.miniBoldLabel);
+
+ GUI.backgroundColor = new Color(1f, 0.6f, 0.6f);
+ if (GUILayout.Button("Clear All Cards", GUILayout.Height(30)))
+ {
+ if (EditorUtility.DisplayDialog("Clear All Cards",
+ "Are you sure you want to clear all cards from the inventory? This cannot be undone in this play session.",
+ "Clear All", "Cancel"))
+ {
+ ClearAllCards();
+ }
+ }
+ GUI.backgroundColor = Color.white;
+ }
+
+ // Refresh the debug information
+ private void RefreshDebugInfo()
+ {
+ if (!Application.isPlaying)
+ return;
+
+ if (CardSystemManager.Instance != null)
+ {
+ currentBoosterCount = CardSystemManager.Instance.GetBoosterPackCount();
+ totalCardsInCollection = CardSystemManager.Instance.GetCardInventory().GetAllCards().Count;
+ Repaint();
+ }
+ }
+
+ private CardAlbumUI GetCardAlbumUI()
+ {
+ if (cachedCardAlbumUI == null)
+ {
+ cachedCardAlbumUI = Object.FindAnyObjectByType();
+
+ if (cachedCardAlbumUI == null)
+ {
+ lastActionMessage = "Error: No CardAlbumUI found in the scene!";
+ Debug.LogError("[CardSystemTesterWindow] " + lastActionMessage);
+ Repaint();
+ }
+ }
+
+ return cachedCardAlbumUI;
+ }
+
+ // Test Action Methods
+
+ private void AddBoosterPacks()
+ {
+ if (CardSystemManager.Instance != null)
+ {
+ CardSystemManager.Instance.AddBoosterPack(boosterPacksToAdd);
+ lastActionMessage = $"Added {boosterPacksToAdd} booster pack(s)";
+ Logging.Debug($"[CardSystemTesterWindow] {lastActionMessage}");
+ RefreshDebugInfo();
+
+ if (autoOpenPacksWhenAdded && GetCardAlbumUI() != null)
+ {
+ SimulateBackpackClick();
+ cachedCardAlbumUI.OpenBoosterPack();
+ }
+ }
+ else
+ {
+ lastActionMessage = "Error: CardSystemManager instance not found!";
+ Debug.LogError("[CardSystemTesterWindow] " + lastActionMessage);
+ Repaint();
+ }
+ }
+
+ private void SimulateBackpackClick()
+ {
+ CardAlbumUI cardAlbumUI = GetCardAlbumUI();
+
+ if (cardAlbumUI != null)
+ {
+ if (cardAlbumUI.BackpackIcon != null)
+ {
+ Button backpackButton = cardAlbumUI.BackpackIcon.GetComponent