import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:youmazgestion/Services/stock_managementDatabase.dart';
import 'package:youmazgestion/controller/userController.dart';
import 'my_app.dart';
import 'package:logging/logging.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  try {
    // print("Initialisation de l'application...");

    // // Pour le développement : supprimer toutes les tables (équivalent à deleteDatabaseFile)
    // // ATTENTION: Décommentez seulement si vous voulez réinitialiser la base
    // // await AppDatabase.instance.deleteDatabaseFile();

    // // Initialiser la base de données MySQL
    // print("Connexion à la base de données MySQL...");
    // // await AppDatabase.instance.initDatabase();
    // print("Base de données initialisée avec succès !");

    // Afficher les informations de la base (pour debug)
    await AppDatabase.instance.printDatabaseInfo();

    // Initialiser le contrôleur utilisateur
    Get.put(UserController());
    // print("Contrôleur utilisateur initialisé");

    // Configurer le logger
    setupLogger();

    // print("Lancement de l'application...");
    runApp(const GetMaterialApp(
      debugShowCheckedModeBanner: false,
      home: MyApp(),
    ));
  } catch (e) {
    // print('Erreur lors de l\'initialisation: $e');

    // Afficher une page d'erreur avec plus de détails
    runApp(MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        backgroundColor: Colors.red[50],
        appBar: AppBar(
          title: const Text('Erreur d\'initialisation'),
          backgroundColor: Colors.red,
          foregroundColor: Colors.white,
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              const Icon(
                Icons.error,
                color: Colors.red,
                size: 48,
              ),
              const SizedBox(height: 16),
              const Text(
                'Erreur de connexion à la base de données',
                style: TextStyle(
                  fontSize: 20,
                  fontWeight: FontWeight.bold,
                  color: Colors.red,
                ),
              ),
              const SizedBox(height: 16),
              const Text(
                'Vérifiez que :',
                style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
              ),
              const SizedBox(height: 8),
              const Text('• XAMPP est démarré'),
              const Text('• MySQL est en cours d\'exécution'),
              const Text('• La base de données "guycom_databse" existe'),
              const Text('• Les paramètres de connexion sont corrects'),
              const SizedBox(height: 16),
              const Text(
                'Détails de l\'erreur :',
                style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
              ),
              const SizedBox(height: 8),
              Expanded(
                child: Container(
                  width: double.infinity,
                  padding: const EdgeInsets.all(12),
                  decoration: BoxDecoration(
                    color: Colors.grey[200],
                    borderRadius: BorderRadius.circular(8),
                    border: Border.all(color: Colors.grey),
                  ),
                  child: SingleChildScrollView(
                    child: Text(
                      e.toString(),
                      style: const TextStyle(
                        fontFamily: 'monospace',
                        fontSize: 12,
                      ),
                    ),
                  ),
                ),
              ),
              const SizedBox(height: 16),
              SizedBox(
                width: double.infinity,
                child: ElevatedButton(
                  onPressed: () {
                    // Relancer l'application
                    main();
                  },
                  style: ElevatedButton.styleFrom(
                    backgroundColor: Colors.blue,
                    foregroundColor: Colors.white,
                  ),
                  child: const Text('Réessayer'),
                ),
              ),
            ],
          ),
        ),
      ),
    ));
  }
}

void setupLogger() {
  Logger.root.level = Level.ALL;
  Logger.root.onRecord.listen((record) {
    // print('${record.level.name}: ${record.time}: ${record.message}');
  });
}
