using UnityEngine;
using UnityEngine.SceneManagement;

/// <summary>
/// Runtime scene loading tester - works in Play mode
/// </summary>
public class RuntimeSceneLoadTest : MonoBehaviour
{
    [Header("Runtime Scene Load Test")]
    public string testSceneName = "TownSceen";

    [ContextMenu("Test Scene Load")]
    public void TestSceneLoad()
    {
        Debug.Log($"=== Testing Scene Load: {testSceneName} ===");

        try
        {
            // Check if scene is in build settings by trying to get its build index
            int buildIndex = SceneUtility.GetBuildIndexByScenePath($"Assets/Scenes/{testSceneName}.unity");

            if (buildIndex >= 0)
            {
                Debug.Log($"✅ Scene found in Build Settings at index {buildIndex}");
                Debug.Log($"Scene path: Assets/Scenes/{testSceneName}.unity");
            }
            else
            {
                Debug.LogError($"❌ Scene NOT found in Build Settings!");
                Debug.LogError($"Add 'Assets/Scenes/{testSceneName}.unity' to Build Settings");
                Debug.LogError("Go to: File > Build Settings > Add Open Scenes (or drag scene files)");
                return;
            }

            // Actually try to load the scene (this will happen)
            Debug.Log($"🚀 Loading scene: {testSceneName}");
            SceneManager.LoadScene(testSceneName);

        }
        catch (System.Exception e)
        {
            Debug.LogError($"❌ Scene loading failed: {e.Message}");
            Debug.LogError("Most likely cause: Scene not in Build Settings");
        }
    }

    [ContextMenu("List All Scenes in Build")]
    public void ListAllScenesInBuild()
    {
        Debug.Log("=== All Scenes in Build Settings ===");

        int sceneCount = SceneManager.sceneCountInBuildSettings;
        Debug.Log($"Total scenes in build: {sceneCount}");

        for (int i = 0; i < sceneCount; i++)
        {
            string scenePath = SceneUtility.GetScenePathByBuildIndex(i);
            string sceneName = System.IO.Path.GetFileNameWithoutExtension(scenePath);
            Debug.Log($"  [{i}] {sceneName} ({scenePath})");
        }

        if (sceneCount == 0)
        {
            Debug.LogError("❌ NO SCENES in Build Settings!");
            Debug.LogError("Go to File > Build Settings and add your scenes");
        }
    }

    void Update()
    {
        // Quick test keys
        if (Input.GetKeyDown(KeyCode.F12))
        {
            TestSceneLoad();
        }

        if (Input.GetKeyDown(KeyCode.F11))
        {
            ListAllScenesInBuild();
        }
    }

    void OnGUI()
    {
        GUILayout.BeginArea(new Rect(Screen.width - 250, Screen.height - 150, 240, 130));
        GUILayout.BeginVertical("box");

        GUILayout.Label("Scene Load Tester", new GUIStyle(GUI.skin.label) { fontSize = 11, fontStyle = FontStyle.Bold });

        if (GUILayout.Button($"Test Load {testSceneName} (F12)"))
        {
            TestSceneLoad();
        }

        if (GUILayout.Button("List Build Scenes (F11)"))
        {
            ListAllScenesInBuild();
        }

        GUILayout.Space(5);
        GUILayout.Label("If test fails:", new GUIStyle(GUI.skin.label) { fontSize = 9, fontStyle = FontStyle.Bold });
        GUILayout.Label("File > Build Settings", new GUIStyle(GUI.skin.label) { fontSize = 9 });
        GUILayout.Label("Add scenes to list", new GUIStyle(GUI.skin.label) { fontSize = 9 });

        GUILayout.EndVertical();
        GUILayout.EndArea();
    }
}
