using System;
using System.Text.Json.Nodes;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using StabilityMatrix.Avalonia.Controls;
using StabilityMatrix.Avalonia.Models.Inference;
using StabilityMatrix.Avalonia.ViewModels.Base;
using StabilityMatrix.Core.Attributes;
namespace StabilityMatrix.Avalonia.ViewModels.Inference;
[View(typeof(SeedCard))]
public partial class SeedCardViewModel : LoadableViewModelBase
{
[ObservableProperty, NotifyPropertyChangedFor(nameof(RandomizeButtonToolTip))]
private bool isRandomizeEnabled = true;
[ObservableProperty]
private long seed;
public string RandomizeButtonToolTip => IsRandomizeEnabled
? "Randomizing Seed on each run"
: "Seed is locked";
[RelayCommand]
public void GenerateNewSeed()
{
Seed = Random.Shared.NextInt64(0, int.MaxValue);
}
///
public override void LoadStateFromJsonObject(JsonObject state)
{
var model = DeserializeModel(state);
Seed = long.TryParse(model.Seed, out var result) ? result : 0;
IsRandomizeEnabled = model.IsRandomizeEnabled;
}
///
public override JsonObject SaveStateToJsonObject()
{
return SerializeModel(new SeedCardModel
{
Seed = Seed.ToString(),
IsRandomizeEnabled = IsRandomizeEnabled
});
}
}