namespace Bloxstrap.Models.APIs.Config
{
// technically an entity, whatever
public class FFlagPreset
{
public string Title { get; set; } = null!;
public string? Description { get; set; }
public string? HelpLink { get; set; }
public string Type { get; set; } = null!;
///
/// Specific to TextBox and Toggle
///
public Dictionary? Apply { get; set; }
#region ComboBox
// Data
public Dictionary>? Options { get; set; }
// Frontend
public List? ComboBoxEntries => Options?.Keys.Prepend("Common.Default").ToList();
public string ComboBoxSelection
{
get
{
if (Options is null || ComboBoxEntries is null)
return "";
foreach (var optionEntry in Options)
{
bool matches = true;
foreach (var flagEntry in optionEntry.Value)
{
if (matches && !App.FastFlags.CheckPresetValue(flagEntry))
matches = false;
}
if (matches)
return optionEntry.Key;
}
return ComboBoxEntries[0];
}
set
{
if (Options is null || ComboBoxEntries is null)
throw new InvalidOperationException();
if (value == ComboBoxEntries[0])
{
// get all flags that this preset sets
var flags = Options.Values.SelectMany(x => x.Keys).Distinct().ToList();
foreach (string flag in flags)
App.FastFlags.SetPreset(flag, null);
}
else
{
foreach (var entry in Options[value])
App.FastFlags.SetPreset(entry.Key, entry.Value);
}
}
}
#endregion
#region TextBox
// TODO: filtering (i dont know how tf thats gonna work)
// Data
public string? InputFilter { get; set; }
public string? Subject { get; set; }
public string? DefaultValue { get; set; }
// Frontend
public string TextBoxValue
{
get
{
if (Subject is null || DefaultValue is null)
return "";
return App.FastFlags.GetValue(Subject) ?? DefaultValue;
}
set
{
if (Apply is null || DefaultValue is null)
throw new InvalidOperationException();
if (InputFilter is not null && !Regex.IsMatch(value, InputFilter))
{
value = TextBoxValue;
return;
}
foreach (var entry in Apply)
{
if (value == DefaultValue)
App.FastFlags.SetPreset(entry.Key, null);
else
App.FastFlags.SetPreset(entry.Key, String.Format(entry.Value, value));
}
}
}
#endregion
#region Toggle
public string? EnabledIf { get; set; }
public bool ToggleEnabled
{
get
{
if (EnabledIf is null)
return false;
return new FlexParser(EnabledIf).Evaluate();
}
set
{
if (Apply is null)
throw new InvalidOperationException();
foreach (var entry in Apply)
App.FastFlags.SetPreset(entry.Key, value ? entry.Value : null);
}
}
#endregion
}
}