using CommunityToolkit.Maui.Alerts;
using CommunityToolkit.Maui.Core;
using System.Drawing;
using WorkFlowCheck.MAUI.Services.Interfaces;

namespace WorkFlowCheck.MAUI.Pages.Security;

public partial class LoginPage : ContentPage
{
    private IUserService _userService;
    private ISyncService _syncService;
    public LoginPage()
    {
        InitializeComponent();
        _userService = MauiProgram.ServiceProvider.GetRequiredService<IUserService>();
        _syncService = MauiProgram.ServiceProvider.GetRequiredService<ISyncService>();
    }
    private async void OnLoginClicked(object sender, EventArgs e)
    {
        LoadingIndicator.IsRunning = true;
        LoadingIndicator.IsVisible = true;
        LoginBtn.IsEnabled = false;
        UsernameEntry.IsEnabled = false;
        PasswordEntry.IsEnabled = false;
        try
        {
            var response = await _userService.Authenticate(UsernameEntry.Text.ToString(), PasswordEntry.Text.ToString());

            if (response != null && response.IsSuccess)
            {
                _userService.SetCurrentUser(response.Data);
                
                //await _syncService.SyncDatas();

                var wFCUser = Newtonsoft.Json.JsonConvert.SerializeObject(response.Data);
                await SecureStorage.Default.SetAsync("WFCUser", "wFCUser");
                await SecureStorage.Default.SetAsync("AuthToken", response.Data.JwtToken);

                await Shell.Current.GoToAsync("//SyncPage");
            }
            else
            {
                
                var visualOptions = new SnackbarOptions
                {
                    ActionButtonTextColor = Colors.Yellow,
                    CornerRadius = new CornerRadius(10),
                    Font = Microsoft.Maui.Font.SystemFontOfSize(16),
                    BackgroundColor = Microsoft.Maui.Graphics.Color.Parse("Red"),
                    TextColor=Colors.Yellow

                };
                var snackbar = Snackbar.Make(
                                                "Invalid login credentials.",
                                                duration: TimeSpan.FromSeconds(10),
                                                action: () => Console.WriteLine("Snackbar dismissed"),
                                                actionButtonText: "OK",
                                                visualOptions: visualOptions
                                            );

                await snackbar.Show();
            }
        }
        catch (Exception)
        {

            throw;
        }
        finally
        {
            LoginBtn.IsEnabled = true;
            LoadingIndicator.IsRunning = false;
            LoadingIndicator.IsVisible = false;
            UsernameEntry.IsEnabled = true;
            PasswordEntry.IsEnabled = true;

        }

    }
}