namespace PkmnLib.Plugin.Gen7.Scripts.Moves;

[Script(ScriptCategory.Move, "set_weather")]
public class SetWeather : Script, IScriptOnInitialize, IScriptOnSecondaryEffect
{
    private string _weather = null!;
    private int _defaultTurns = 5;

    /// <inheritdoc />
    public void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters)
    {
        if (!parameters!.TryGetValue("weather", out var weather) || weather is null)
        {
            throw new Exception("Weather not provided.");
        }
        _weather = weather.ToString();
        if (parameters.TryGetValue("turns", out var turns) && turns is int turn)
        {
            _defaultTurns = turn;
        }
    }

    /// <inheritdoc />
    public void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
    {
        target.BattleData?.Battle.SetWeather(_weather, _defaultTurns);
    }
}