using GuilhermesApp.Helpers; using Firebase.Database.Query; namespace GuilhermesApp.Pages; public partial class RegisterPage : ContentPage { private FirebaseService _firebaseService = new FirebaseService(); public RegisterPage() { InitializeComponent(); } private async void OnRegisterAccountClicked(object sender, EventArgs e) { // 1. Validar se está tudo preenchido if (string.IsNullOrWhiteSpace(NomeEntry.Text) || string.IsNullOrWhiteSpace(TelemovelEntry.Text) || GeneroPicker.SelectedIndex == -1 || string.IsNullOrWhiteSpace(EmailEntry.Text) || string.IsNullOrWhiteSpace(PasswordEntry.Text)) { await DisplayAlert("Erro", "Preenche todos os campos.", "OK"); return; } // 2. Validar passwords if (PasswordEntry.Text != ConfirmPasswordEntry.Text) { await DisplayAlert("Erro", "As passwords não coincidem.", "OK"); return; } if (PasswordEntry.Text.Length < 6) { await DisplayAlert("Erro", "A password tem de ter pelo menos 6 caracteres.", "OK"); return; } try { // 3. Cria a conta na Autenticação var userCredential = await _firebaseService.AuthClient.CreateUserWithEmailAndPasswordAsync(EmailEntry.Text, PasswordEntry.Text); var uid = userCredential.User.Uid; // O ID único do utilizador // 4. Guarda os restantes dados na Realtime Database, na pasta "Users" await _firebaseService.DbClient .Child("Users") .Child(uid) .PutAsync(new { Nome = NomeEntry.Text, Telemovel = TelemovelEntry.Text, Genero = GeneroPicker.SelectedItem.ToString(), Email = EmailEntry.Text }); await DisplayAlert("Sucesso", "Conta criada com sucesso!", "OK"); // Volta para a página de Login await Shell.Current.GoToAsync(".."); } catch (Exception ex) { // Mostra o erro exato que vem do Firebase await DisplayAlert("Erro", $"Não foi possível criar a conta. Detalhe: {ex.Message}", "OK"); } } }