using Model;
using Email = Model.Email;

namespace IHM.Mobile;

public partial class Inscription : ContentPage
{
    private string code;
    public Manager Mgr => (App.Current as App).Manager;
    public Inscription()
	{
		InitializeComponent();
	}
    public void InscriptionOnClicked(object sender, EventArgs e)
	{
        if (EntryNewName.Text == null || EntryNewMail.Text == null || EntryConfirmationPassword.Text == null || EntryNewPassword.Text == null ||
            EntryNewSurname.Text == null)
        {
            AffichError("Champ invalide", "Veuillez compléter tout les champs", "OK");
        }
        else
        {
            if(EntryNewPassword.Text.Equals(EntryConfirmationPassword.Text)) {
                if (Mgr.existEmail(EntryNewMail.Text))
                {
                    AffichError("Mail existant", "un compte porte déjà cette adresse mail, veuillez en changer", "OK");
                }
                else
                {
                    try
                    {
                        Random generator = new Random();
                        code = generator.Next(0, 1000000).ToString("D6");
                        Email.CreateMail(EntryNewMail.Text, code);
                        ValidateReceptCode.IsVisible = true;
                    }
                    catch (Exception ex)
                    {
                        AffichError("Information invalide", ex.Message, "OK");
                    }
                }
            }
            else
            {
                AffichError("Mot de passe de confirmation invalide", "Veuillez mettre deux mots de passe identiques", "OK");
            }
        }
    }
    private void ValideCode(object sender, EventArgs e)
    {
        if (EntryCodeRecept.Text == code)
        {
            Inscrit inscrit = new Inscrit(Mgr.lastInscrit() + 1, EntryNewName.Text, EntryNewMail.Text, EntryNewSurname.Text, EntryNewPassword.Text);
            Mgr.createInscrit(inscrit);
            AffichError("compte créé", "Compte bien créé", "OK");
            NavigateTo("..");
        }
        else
        {
            AffichError("Code non identique", "Veuillez entrer le même code que celui reçu par mail", "OK");
        }
    }

    private async void AffichError(string s, string s1, string s2)
    {
        await DisplayAlert(s, s1, s2);
    }

    private async void NavigateTo(string s)
    {
        await Shell.Current.GoToAsync(s);
    }
}