using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
using PkmnLib.Plugin.Gen7.Scripts.Utils;

namespace PkmnLib.Plugin.Gen7.Scripts.Moves;

[Script(ScriptCategory.Move, "secret_power")]
public class SecretPower : Script, IScriptOnSecondaryEffect
{
    /// <inheritdoc />
    public void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
    {
        var environmentCategory = move.Battle.GetEnvironmentCategory();
        switch (environmentCategory)
        {
            case EnvironmentHelper.EnvironmentCategory.Electric:
            case EnvironmentHelper.EnvironmentCategory.Normal:
                target.SetStatus(ScriptUtils.ResolveName<Status.Paralyzed>(), move.User);
                break;
            case EnvironmentHelper.EnvironmentCategory.Rock:
                target.Volatile.Add(new FlinchEffect());
                break;
            case EnvironmentHelper.EnvironmentCategory.Ground:
                target.ChangeStatBoost(Statistic.Accuracy, -1, false, false);
                break;
            case EnvironmentHelper.EnvironmentCategory.Water:
                target.ChangeStatBoost(Statistic.Attack, -1, false, false);
                break;
            case EnvironmentHelper.EnvironmentCategory.Ice:
                target.SetStatus(ScriptUtils.ResolveName<Status.Frozen>(), move.User);
                break;
            case EnvironmentHelper.EnvironmentCategory.Grass:
                target.SetStatus(ScriptUtils.ResolveName<Status.Sleep>(), move.User);
                break;
            case EnvironmentHelper.EnvironmentCategory.Fairy:
                target.ChangeStatBoost(Statistic.SpecialAttack, -1, false, false);
                break;
            case EnvironmentHelper.EnvironmentCategory.Psychic:
                target.ChangeStatBoost(Statistic.Speed, -1, false, false);
                break;
            // ReSharper disable once RedundantEmptySwitchSection
            default:
                // No effect for unrecognized environments
                break;
        }
    }
}