using AIStudio.Tools.PluginSystem.Assistants.Icons; using Lua; namespace AIStudio.Tools.PluginSystem.Assistants.DataModel; public sealed class AssistantSwitch : StatefulAssistantComponentBase { public override AssistantComponentType Type => AssistantComponentType.SWITCH; public override Dictionary Props { get; set; } = new(); public override List Children { get; set; } = new(); public string Label { get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Label)); set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Label), value); } public bool Value { get => AssistantComponentPropHelper.ReadBool(this.Props, nameof(this.Value), false); set => AssistantComponentPropHelper.WriteBool(this.Props, nameof(this.Value), value); } public bool Disabled { get => AssistantComponentPropHelper.ReadBool(this.Props, nameof(this.Disabled), false); set => AssistantComponentPropHelper.WriteBool(this.Props, nameof(this.Disabled), value); } public LuaFunction? OnChanged { get => this.Props.TryGetValue(nameof(this.OnChanged), out var value) && value is LuaFunction onChanged ? onChanged : null; set => AssistantComponentPropHelper.WriteObject(this.Props, nameof(this.OnChanged), value); } public string LabelOn { get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.LabelOn)); set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.LabelOn), value); } public string LabelOff { get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.LabelOff)); set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.LabelOff), value); } public string LabelPlacement { get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.LabelPlacement)); set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.LabelPlacement), value); } public string CheckedColor { get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.CheckedColor)); set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.CheckedColor), value); } public string UncheckedColor { get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.UncheckedColor)); set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.UncheckedColor), value); } public string Icon { get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Icon)); set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Icon), value); } public string IconColor { get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.IconColor)); set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.IconColor), value); } public string Class { get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Class)); set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Class), value); } public string Style { get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Style)); set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Style), value); } #region Implementation of IStatefulAssistantComponent public override void InitializeState(AssistantState state) { if (!state.Bools.ContainsKey(this.Name)) state.Bools[this.Name] = this.Value; } public override string UserPromptFallback(AssistantState state) { var userDecision = false; var promptFragment = $"{Environment.NewLine}context:{Environment.NewLine}{this.UserPrompt}{Environment.NewLine}---{Environment.NewLine}"; state.Bools.TryGetValue(this.Name, out userDecision); promptFragment += $"user decision: {userDecision}"; return promptFragment; } #endregion public MudBlazor.Color GetColor(string colorString) => Enum.TryParse(colorString, out var color) ? color : MudBlazor.Color.Inherit; public Placement GetLabelPlacement() => Enum.TryParse(this.LabelPlacement, out var placement) ? placement : Placement.Right; public string GetIconSvg() => MudBlazorIconRegistry.TryGetSvg(this.Icon, out var svg) ? svg : string.Empty; }