using PkmnLib.Plugin.Gen7.Scripts.Utils;

namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;

[Script(ScriptCategory.Pokemon, "bide")]
public class BideEffect : Script, IScriptForceTurnSelection, IScriptOnIncomingHit, IScriptOnDamage
{
    private readonly IPokemon? _owner;
    public byte Turns;
    public uint DamageTaken;
    public readonly List<IPokemon> HitBy = [];

    private BideEffect()
    {
    }

    public BideEffect(IPokemon owner)
    {
        _owner = owner;
    }

    /// <inheritdoc />
    public void OnIncomingHit(IExecutingMove move, IPokemon target, byte hit)
    {
        HitBy.Add(move.User);
    }

    /// <inheritdoc />
    public void OnDamage(IPokemon pokemon, DamageSource source, uint oldHealth, uint newHealth)
    {
        DamageTaken += oldHealth - newHealth;
    }

    private ITurnChoice? _choice;

    /// <inheritdoc />
    public void ForceTurnSelection(IBattle battle, byte sideIndex, byte position, ref ITurnChoice? choice)
    {
        if (_owner == null)
            return;
        var ownerBattleData = _owner.BattleData;
        if (ownerBattleData == null)
            return;
        if (ownerBattleData.SideIndex != sideIndex || ownerBattleData.Position != position)
            return;
        if (_choice != null)
        {
            choice = _choice;
            return;
        }
        choice = _choice = TurnChoiceHelper.CreateMoveChoice(_owner, "bide", ownerBattleData.SideIndex, position);
    }
}