using System;
using System.Collections;
using System.Threading.Tasks;
using Cirno.Scripts.Components.FSM;
using Godot;

namespace Cirno.Scripts.Activables;

public partial class HealthStation : Activable
{
    [Export]
    public bool IsEnabled { get; set; }

    [Export]
    public float HealthPerSecond { get; private set; } = 10f;

    [Export]
    public float ShieldPerSecond { get; private set; } = 10f;

    private AnimatedSprite2D _animatedSprite;

    private GpuParticles2D _particles;

    private bool _isHealing = false;

    private InteractionController _cachedPlayer;

    private double _healingTimer = 0;

    public override void _Ready()
    {
        _particles = GetNode<GpuParticles2D>("./Particles");
        _animatedSprite = GetNode<AnimatedSprite2D>("AnimatedSprite2D");

        _particles.Emitting = false;

        if (IsEnabled)
        {
            _animatedSprite.Play("Active");
        }
        else
        {
            _animatedSprite.Play("Default");
        }

        _healingTimer = 0;
    }

    public override void _Process(double delta)
    {
        base._Process(delta);

        if (!_isHealing || _cachedPlayer == null) return;
        _healingTimer += delta;

        if (!(_healingTimer >= 1)) return;
        if (_cachedPlayer.Health is not null)
        {
            _cachedPlayer.Health.CurrentResource += HealthPerSecond;
        }
        if (_cachedPlayer.Shield is not null)
        {
            _cachedPlayer.Shield.CurrentResource += ShieldPerSecond;
        }

        _healingTimer = 0;
    }

    public override bool Activate(ActivationType activationType = ActivationType.Toggle)
    {
        switch (activationType)
        {
            case ActivationType.Toggle:
                // Enables/Disables teleporter
                break;
            case ActivationType.Enable:
                // Enables Teleporter
                IsEnabled = true;
                _animatedSprite.Play("Active");
                break;
            case ActivationType.Disable:
                IsEnabled = false;
                _animatedSprite.Play("Default");
                // Disables Teleporter
                break;
            case ActivationType.Use:
                // Teleports
                break;
            case ActivationType.Destroy:
                // Destroys
                break;
        }

        return true;
    }

    private void _on_area_entered(Area2D area)
    {
        if (!IsEnabled) return;
        if (area is not InteractionController interactionController) return;

        _cachedPlayer = interactionController;
        
        _isHealing = true;
        _particles.Emitting = true;
    }

    private void _on_area_Exited(Area2D area)
    {
        if (!_isHealing) return;
        if (!IsEnabled) return;
        if (area is not InteractionController player) return;
 
        // Stop healing player if active

        _isHealing = false;
        _particles.Emitting = false;
    }

    // private void _on_body_entered(CharacterBody2D area)
    // {
    //      // Heal player if active
    //     if (!IsEnabled) return;
    //     if (area is not PlayerStateMachine player) return;
    //
    //     _cachedPlayer = player;
    //
    //     _isHealing = true;
    //     _particles.Emitting = true;
    // }
    //
    // private void _on_body_exited(CharacterBody2D area)
    // {
    //     if (!_isHealing) return;
    //     if (!IsEnabled) return;
    //     if (area is not PlayerStateMachine player) return;
    //
    //     // Stop healing player if active
    //
    //     _isHealing = false;
    //     _particles.Emitting = false;
    // }


}