using UnityEngine;
using UnityEditor;

#if UNITY_EDITOR
/// <summary>
/// Utility class to help set up the animation system with the input system.
/// This can be accessed from the Unity Editor menu.
/// </summary>
public class InputAnimationSetup : MonoBehaviour
{
    [MenuItem("Tools/Setup Input Animation System")]
    public static void SetupInputAnimationSystem()
    {
        // Find the player character (assuming it has a PlayerInput component)
    var playerInputs = UnityEngine.Object.FindObjectsByType<UnityEngine.InputSystem.PlayerInput>(UnityEngine.FindObjectsSortMode.None);
        
        if (playerInputs.Length == 0)
        {
            Debug.LogError("No PlayerInput component found in the scene. Make sure your player character has a PlayerInput component.");
            return;
        }
        
        GameObject targetObject = null;
        
        // If there are multiple PlayerInput components, show a selection dialog
        if (playerInputs.Length > 1)
        {
            Debug.LogWarning("Multiple PlayerInput components found. Selecting the first one.");
            targetObject = playerInputs[0].gameObject;
        }
        else
        {
            targetObject = playerInputs[0].gameObject;
        }
        
        if (targetObject == null)
        {
            Debug.LogError("Failed to find a suitable target object.");
            return;
        }
        
        // Check if the target object already has an AnimationManager
        AnimationManager animManager = targetObject.GetComponent<AnimationManager>();
        if (animManager == null)
        {
            animManager = targetObject.AddComponent<AnimationManager>();
            Debug.Log("Added AnimationManager to " + targetObject.name);
        }
        
        // Check if the target object already has an InputToAnimation
        InputToAnimation inputAnim = targetObject.GetComponent<InputToAnimation>();
        if (inputAnim == null)
        {
            inputAnim = targetObject.AddComponent<InputToAnimation>();
            Debug.Log("Added InputToAnimation to " + targetObject.name);
        }
        
        // Configure the InputToAnimation component with default mappings for our 8 core animations
        SerializedObject serializedInputAnim = new SerializedObject(inputAnim);
        serializedInputAnim.FindProperty("jabInputAction").stringValue = "Jab";
        serializedInputAnim.FindProperty("haymakerInputAction").stringValue = "Haymaker";
        serializedInputAnim.FindProperty("spinningBackfistInputAction").stringValue = "SpinningBackfist";
        serializedInputAnim.FindProperty("elbowSmashInputAction").stringValue = "ElbowSmash";
        serializedInputAnim.FindProperty("airPunchInputAction").stringValue = "AirPunch";
        serializedInputAnim.FindProperty("lowKickInputAction").stringValue = "LowKick";
        serializedInputAnim.FindProperty("basicKickInputAction").stringValue = "BasicKick";
        serializedInputAnim.FindProperty("sumoSlapInputAction").stringValue = "SumoSlap";
        serializedInputAnim.ApplyModifiedProperties();
        
        // Make sure the target object has an Animator component
        Animator animator = targetObject.GetComponent<Animator>();
        if (animator == null)
        {
            animator = targetObject.AddComponent<Animator>();
            Debug.LogWarning("Added Animator component to " + targetObject.name + ", but you'll need to assign an animator controller to it.");
        }
        
        // Display info about which animations are active
    Debug.Log("Only the following 8 animations are currently active:");
        Debug.Log("- Jab\n- Haymaker\n- BasicKick\n- SumoSlap\n- SpinningBackfist\n- ElbowSmash\n- AirPunch\n- LowKick");
        Debug.Log("Other animations have been commented out for future use.");
    Debug.Log("Legacy direct triggers in PlayerScript have been neutralized. InputToAnimation now exclusively drives animations via the new Input System.");
        
        // Select the object in the inspector for easier configuration
        Selection.activeGameObject = targetObject;
        
        Debug.Log("Input Animation System setup complete for " + targetObject.name);
        Debug.Log("Make sure all animation clips are properly set up in your Animator Controller!");
    }
}
#endif