using Avalonia.Controls;
using CheckArticlesForSpam.Models;
using CheckArticlesForSpam.Views;
using ReactiveUI;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace CheckArticlesForSpam.ViewModels
{

    public class RegistrationPageViewModel : ReactiveObject
    {
        MlgTeamContext teamContext;
        User newUser;
        string repeatInputPassword = "";
        string message = "";
        char? passwordChar = '*';

        public RegistrationPageViewModel()
        {

        }
        public RegistrationPageViewModel(MlgTeamContext teamContext)
        {
            this.teamContext = teamContext;
            NewUser = new User();
        }

        public string RepeatInputPassword { get => repeatInputPassword; set => repeatInputPassword = value; }
        public string Message { get => message; set => this.RaiseAndSetIfChanged(ref message, value); }
        public User NewUser { get => newUser; set => newUser = value; }
        public char? PasswordChar { get => passwordChar; set => this.RaiseAndSetIfChanged(ref passwordChar, value); }

        public User AddUserInDataBase()
        {
            if (string.IsNullOrEmpty(NewUser.Login) || string.IsNullOrEmpty(NewUser.Username) || string.IsNullOrEmpty(NewUser.Password) || string.IsNullOrEmpty(RepeatInputPassword) || string.IsNullOrEmpty(NewUser.Phone))
            {
                Message = "Заполните все поля";
                return null;
            }
            else if (!Regex.IsMatch(NewUser.Phone, @"^(?:\+7|8)\d{10}$"))
            {
                Message = "Введите корректный телефон";
                return null;
            }

            else if (NewUser.Password != RepeatInputPassword)
            {
                Message = "Пароли не совпадают.\nВведите корректные данные";
                return null;
            }
            else if(!Regex.IsMatch(NewUser.Password, @"\S{6,}"))
            {
                Message = "Ваш пароль не должен быть \nменьше 6 символов";
                return null;
            }
            else if (!Regex.IsMatch(NewUser.Password, @"\w*[0-9]\w*"))
            {
                Message = "У вашего пароля нет цифры";
                return null;
            }
            else if (teamContext.Users.FirstOrDefault(x => x.Login == NewUser.Login) != null)
            {
                Message = "Такой пользователь существует\nВведите другой логин";
                return null;
            }
            
            else
            {
                teamContext.Add(NewUser);
                teamContext.SaveChanges();
                return NewUser;
            }
        }
        public UserControl LoadPageAuthorization()
        {
            return new AuthorizationPage();
        }
    }
}
