import 'dart:async';

import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import '../providers/local_user_provider.dart';
import 'package:provider/provider.dart';

class LoginViewModel extends ChangeNotifier {
  final TextEditingController emailController = TextEditingController();
  final TextEditingController passwordController = TextEditingController();
  String errorMessage = '';
  bool isLoading = false;
  bool obscurePassword = true;
  bool highlightPasswordField = false;
  bool highlightEmailField = false;

  void togglePasswordVisibility() {
    obscurePassword = !obscurePassword;
    notifyListeners();
  }

  Future<void> signIn(BuildContext context) async {
    final localAuthProvider =
        Provider.of<LocalUserProvider>(context, listen: false);
    isLoading = true;
    errorMessage = '';
    highlightPasswordField = false;
    highlightEmailField = false;
    notifyListeners();

    try {
      // --- Étape 1: Connecter l'utilisateur dans Firebase Auth ---
      await localAuthProvider.signInWithEmailAndPassword(
        emailController.text,
        passwordController.text,
      );

      // --- Étape 2: Charger les données utilisateur en arrière-plan ---
      unawaited(
        localAuthProvider.loadUserData().catchError((e) {
          debugPrint('Erreur chargement profil après connexion : $e');
        }),
      );

      // Vérifier si le contexte est toujours valide
      if (context.mounted) {
        Navigator.of(context, rootNavigator: true)
            .pushReplacementNamed('/calendar');
      }
    } on FirebaseAuthException catch (e) {
      // Gestion spécifique des erreurs d'authentification (email/mot de passe incorrects, etc.)
      isLoading = false;
      errorMessage =
          e.message ?? 'Une erreur est survenue lors de la connexion Firebase.';
      notifyListeners();
    } catch (e) {
      // Gestion des autres erreurs potentielles (ex: erreur lors de loadUserData)
      isLoading = false;
      errorMessage = 'Une erreur inattendue est survenue: ${e.toString()}';
      notifyListeners();
    }
  }

  @override
  void dispose() {
    emailController.dispose();
    passwordController.dispose();
    super.dispose();
  }
}
