namespace ZB.MOM.WW.ScadaBridge.Commons.Entities.InboundApi;

public class ApiMethod
{
    /// <summary>Gets or sets the primary key.</summary>
    public int Id { get; set; }
    /// <summary>Gets or sets the method name used in the route (<c>/api/{Name}</c>).</summary>
    public string Name { get; set; }
    /// <summary>Gets or sets the C# script body executed when the method is invoked.</summary>
    public string Script { get; set; }
    /// <summary>Gets or sets the JSON Schema describing the accepted parameters, or <c>null</c> if the method takes no parameters.</summary>
    public string? ParameterDefinitions { get; set; }
    /// <summary>Gets or sets the JSON Schema describing the return type, or <c>null</c> if the method returns nothing.</summary>
    public string? ReturnDefinition { get; set; }
    /// <summary>Gets or sets the script execution timeout in seconds.</summary>
    public int TimeoutSeconds { get; set; }

    /// <summary>Initializes a new <see cref="ApiMethod"/> with the required name and script.</summary>
    /// <param name="name">The method name (used as the route segment).</param>
    /// <param name="script">The C# script body to execute.</param>
    public ApiMethod(string name, string script)
    {
        Name = name ?? throw new ArgumentNullException(nameof(name));
        Script = script ?? throw new ArgumentNullException(nameof(script));
    }
}
