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 depuis Firestore ---
      await localAuthProvider.loadUserData();

      // Vérifier si le contexte est toujours valide
      if (context.mounted) {
        // Vérifier si l'utilisateur a bien été chargé dans le provider
        if (localAuthProvider.currentUser != null) {
          // Utiliser pushReplacementNamed pour une transition propre
          Navigator.of(context, rootNavigator: true)
              .pushReplacementNamed('/calendar');
        } else {
          errorMessage =
              'Erreur inattendue après connexion: Données utilisateur non chargées.';
          isLoading = false;
          notifyListeners();
        }
      }
    } 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();
  }
}
