using Unity.BossRoom.Gameplay.GameplayObjects.Character;
using Unity.Netcode;
using UnityEngine;

[CreateAssetMenu(menuName = "Abilities/FreezeThrow")]
public class FreezeThrowAbility : Ability
{
    [Header("FreezeThrow Settings")]
    public float projectileSpeed = 10f;

    public override void Execute(ServerCharacter character, Vector3 targetPosition,  Vector3 targetRotation)
    {
        if (!NetworkManager.Singleton.IsServer)
        {
            Debug.LogError("[FreezeThrowAbility] Execute should only be called on the server.");
            return;
        }

        if (character == null)
        {
            Debug.LogError("[FreezeThrowAbility] ServerCharacter is null.");
            return;
        }

        // Spawn the projectile
        var spawnPosition = character.transform.position + character.transform.forward * 1.5f;
        var direction = (targetPosition - spawnPosition).normalized;

        GameObject projectileInstance = Instantiate(prefab, spawnPosition, Quaternion.LookRotation(direction));
        if (projectileInstance.TryGetComponent(out NetworkObject networkObject))
        {
            networkObject.Spawn();

            if (projectileInstance.TryGetComponent(out FreezeThrowPrefab freezeProjectile))
            {
                freezeProjectile.Initialize(character, direction, projectileSpeed, abilityDuration);
                Debug.Log($"[FreezeThrowAbility] Projectile launched by {character.name}.");
            }
            else
            {
                Debug.LogError("[FreezeThrowAbility] The projectile prefab does not have a FreezeProjectile component.");
                Destroy(projectileInstance);
            }
        }
        else
        {
            Debug.LogError("[FreezeThrowAbility] Prefab must have a NetworkObject component.");
            Destroy(projectileInstance);
        }
    }
}