using AutoCat.Utils;
using AutoCatCore.Model;
using AutoCatCore.MVVM;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;

namespace AutoCat.ViewModel
{
	public class AuthViewModel
	{
		private IDialogService dialogService;
		private AutoCatDbContext dbContext;
		private User currentUser;

		public string Email { get; private set; }

		public bool isLoggedIn => currentUser?.Token != null;

		public AuthViewModel(IDialogService dialogService)
		{
			this.dialogService = dialogService;
			Init();
		}

		private async void Init()
		{
			dbContext = new AutoCatDbContext();
			await dbContext.Database.EnsureCreatedAsync();
			if (dbContext.Users.Count() > 0)
			{
				currentUser = dbContext.Users.First();
				Email = currentUser.Email;
				Api.SetAccessToken(currentUser.Token);
			}
		}

		public async Task Login(string login, string password)
		{
			try
			{
				var user = await Api.Login(login, password);
				await dbContext.Users.AddAsync(user);
				await dbContext.SaveChangesAsync();
			}
			catch(Exception ex)
			{
				await dialogService.ShowErrorDialogAsync(ex.Message, "Authorization error");
			}
		}
	}
}
