import 'package:flutter/material.dart';
import 'package:geosector_app/core/data/models/amicale_model.dart';
import 'package:geosector_app/core/repositories/amicale_repository.dart';
import 'package:geosector_app/core/repositories/region_repository.dart';
import 'package:geosector_app/core/repositories/user_repository.dart';
import 'package:geosector_app/presentation/widgets/entite_form.dart';
import 'package:provider/provider.dart';

/// Exemple d'utilisation du widget EntiteForm avec le RegionRepository
///
/// Ce widget montre comment intégrer le formulaire d'entité dans une page
/// et comment utiliser le RegionRepository pour charger les régions.
class EntiteFormWithRegionsExample extends StatefulWidget {
  final int? amicaleId;
  final bool readOnly;

  const EntiteFormWithRegionsExample({
    Key? key,
    this.amicaleId,
    this.readOnly = false,
  }) : super(key: key);

  @override
  State<EntiteFormWithRegionsExample> createState() =>
      _EntiteFormWithRegionsExampleState();
}

class _EntiteFormWithRegionsExampleState
    extends State<EntiteFormWithRegionsExample> {
  AmicaleModel? _amicale;
  bool _isLoading = true;
  late RegionRepository _regionRepository;

  @override
  void initState() {
    super.initState();
    _regionRepository = RegionRepository();
    _initRepositories();
  }

  Future<void> _initRepositories() async {
    setState(() {
      _isLoading = true;
    });

    try {
      // Initialiser le repository des régions
      await _regionRepository.init();

      // Charger l'amicale si un ID est fourni
      if (widget.amicaleId != null) {
        final amicaleRepository =
            Provider.of<AmicaleRepository>(context, listen: false);
        final amicale = amicaleRepository.getAmicaleById(widget.amicaleId!);

        setState(() {
          _amicale = amicale;
          _isLoading = false;
        });
      } else {
        setState(() {
          _isLoading = false;
        });
      }
    } catch (e) {
      debugPrint('Erreur lors de l\'initialisation: $e');
      setState(() {
        _isLoading = false;
      });
    }
  }

  void _handleSubmit(AmicaleModel amicale) async {
    try {
      final amicaleRepository =
          Provider.of<AmicaleRepository>(context, listen: false);

      // Sauvegarder l'amicale
      final savedAmicale = await amicaleRepository.saveAmicale(amicale);

      // Afficher un message de confirmation
      if (mounted) {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(
            content:
                Text('Amicale ${savedAmicale.name} sauvegardée avec succès'),
            backgroundColor: Colors.green,
          ),
        );

        // Retourner à la page précédente
        Navigator.of(context).pop();
      }
    } catch (e) {
      debugPrint('Erreur lors de la sauvegarde de l\'amicale: $e');
      if (mounted) {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(
            content: Text('Erreur lors de la sauvegarde: $e'),
            backgroundColor: Colors.red,
          ),
        );
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        // Fournir le RegionRepository pour qu'il soit accessible par le widget EntiteForm
        ChangeNotifierProvider<RegionRepository>.value(
            value: _regionRepository),
      ],
      child: Scaffold(
        appBar: AppBar(
          title: Text(widget.amicaleId != null
              ? (widget.readOnly
                  ? 'Détails de l\'amicale'
                  : 'Modifier l\'amicale')
              : 'Nouvelle amicale'),
        ),
        body: _isLoading
            ? const Center(child: CircularProgressIndicator())
            : SingleChildScrollView(
                padding: const EdgeInsets.all(16.0),
                child: EntiteForm(
                  amicale: _amicale,
                  onSubmit: widget.readOnly ? null : _handleSubmit,
                  readOnly: widget.readOnly,
                ),
              ),
      ),
    );
  }
}
