using System.Diagnostics.CodeAnalysis;
using PkmnLib.Static;
using PkmnLib.Static.Utils;

namespace PkmnLib.Dynamic.ScriptHandling;

/// <summary>
/// Class responsible for the creation of <see cref="Script"/> instances.
/// </summary>
public class ScriptResolver
{
    private Dictionary<(ScriptCategory, StringKey), Func<Script>> _scriptCtors;

    /// <inheritdoc cref="ScriptResolver"/>
    public ScriptResolver(Dictionary<(ScriptCategory, StringKey), Func<Script>> scriptCtors)
    {
        _scriptCtors = scriptCtors;
    }
    
    /// <summary>
    /// Try and create a new script for the given category and key. If the script does not exist, return false.
    /// </summary>
    public bool TryResolve(ScriptCategory category, StringKey key, [MaybeNullWhen(false)] out Script script)
    {
        if (!_scriptCtors.TryGetValue((category, key), out var scriptCtor))
        {
            script = null;
            return false;
        }
        script = scriptCtor();
        return true;
    }
    
    /// <summary>
    /// Try and resolve an item script for the given item. If the item does not have a script, return false.
    /// </summary>
    public bool TryResolveItemScript(IItem item, [MaybeNullWhen(false)] out Script script)
    {
        throw new NotImplementedException();
    }
}