using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
namespace ClawdDotNet.Desktop.ViewModels;
/// Eingabe eines Lizenzschlüssels. Siehe AvaloniaLicensePrompt.
public sealed partial class LicenseViewModel : ViewModelBase
{
private readonly TaskCompletionSource _completion = new();
[ObservableProperty]
private string _key;
public string HardwareId { get; }
/// Warum der bisherige Schlüssel nicht taugt; leer beim ersten Fragen.
public string Problem { get; }
/// Der eingegebene Schlüssel, oder null bei Abbruch.
public Task Result => _completion.Task;
public LicenseViewModel(string hardwareId, string? problem, string? currentKey)
{
HardwareId = hardwareId;
Problem = problem ?? "";
_key = currentKey ?? "";
}
[RelayCommand]
private void Confirm()
{
var value = Key.Trim();
// Leere Eingabe ist kein Abbruch — sonst schließt sich das Fenster, wenn jemand
// versehentlich die Eingabetaste drückt.
if (value.Length == 0) return;
_completion.TrySetResult(value);
}
[RelayCommand]
private void Cancel() => _completion.TrySetResult(null);
/// Schließt der Benutzer das Fenster, gilt das als Abbruch.
public void CancelIfPending() => _completion.TrySetResult(null);
}