using System;
using Avalonia.Controls;
using Avalonia.Interactivity;
using LauncherGUI.ViewModels;

namespace LauncherGUI.Views;
using Plombir;

public partial class SessionManagmentWindow : Window
{
    private MainWindowViewModel _mainWindowVM;
    public SessionManagmentWindow(MainWindowViewModel mainWindowVM)
    {
        InitializeComponent();
        _mainWindowVM = mainWindowVM;
        PopulateInfo();
    }

    private void PopulateInfo()
    {
        inputNickname.Text = _mainWindowVM.Usernick; // setting default nickname.
        currentNickname.Text = _mainWindowVM.Usernick;
        loginMethod.Text = _mainWindowVM.LoginMethod;
        currentUuid.Text = _mainWindowVM.UUID;
    }

    private void OnSaveButtonClick(object sender, RoutedEventArgs e)
    {
        if (sender is not Button button) return;

        _mainWindowVM.Usernick = inputNickname.Text;
        _mainWindowVM.LoginMethod = "offline";  // Swapping to offline method
        _mainWindowVM.UUID = "offline";         // Just to be sure
        _mainWindowVM.AccsesToken = "offline";

        Console.WriteLine($"Changing nickname to {inputNickname.Text}");

        button.Content = "Saved!";
        SaveSessionInfo();
        PopulateInfo();
    }

    async private void OnMicrosoftLoginClick(object sender, RoutedEventArgs e)
    {
        var session = await Utils.GetLicensedSession();
        _mainWindowVM.LoginMethod = "microsoft";
        _mainWindowVM.Usernick = session.Username;
        _mainWindowVM.UUID = session.UUID;
        _mainWindowVM.AccsesToken = session.AccessToken;
        SaveSessionInfo();
        PopulateInfo();
    }

    private void SaveSessionInfo()
    {
        ConfigManager.WriteInConfig("nickname", _mainWindowVM.Usernick);
        ConfigManager.WriteInConfig("login-method", _mainWindowVM.LoginMethod);
        ConfigManager.WriteInConfig("uuid", _mainWindowVM.UUID);
        ConfigManager.WriteInConfig("accsess-token", _mainWindowVM.AccsesToken);
    }
}