using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using RobotNet.Script.Shares; using RobotNet.ScriptManager.Services; using RobotNet.Shares; namespace RobotNet.ScriptManager.Controllers; [Route("api/[controller]")] [ApiController] [Authorize] public class ScriptVariablesController(ScriptGlobalsManager globalManager) : ControllerBase { [HttpGet] [Route("")] public IEnumerable GetAlls() => globalManager.GetVariablesData(); [HttpGet] [Route("{name}")] public MessageResult GetVariableValue(string name) { if (globalManager.Globals.TryGetValue(name, out var value)) { return new (true, "") { Data = value?.ToString() ?? "null" }; } else { return new(false, $"Variable \"{name}\" not found."); } } [HttpPut] [Route("{name}")] public MessageResult UpdateVariableValue(string name, [FromBody] UpdateVariableModel model) { try { if(name != model.Name) { return new MessageResult(false, "Variable name in the URL does not match the name in the body."); } globalManager.SetValue(model.Name, model.Value); return new MessageResult(true, $"Variable \"{model.Name}\" updated {model.Value} successfully."); } catch (Exception ex) { return new MessageResult(false, ex.Message); } } [HttpPut] [Route("{name}/Reset")] public MessageResult ResetVariableValue(string name, [FromBody] UpdateVariableModel model) { try { if (name != model.Name) { return new MessageResult(false, "Variable name in the URL does not match the name in the body."); } globalManager.ResetValue(model.Name); return new MessageResult(true, $"Variable \"{model.Name}\" reset successfully."); } catch (Exception ex) { return new MessageResult(false, ex.Message); } } }