import 'package:flutter/material.dart';
import 'package:em2rp/views/widgets/inputs/int_stepper_field.dart';

class EventDetailsSection extends StatefulWidget {
  final TextEditingController descriptionController;
  final TextEditingController installationController;
  final TextEditingController disassemblyController;
  final TextEditingController addressController;
  final TextEditingController jaugeController;
  final TextEditingController contactEmailController;
  final TextEditingController contactPhoneController;
  final bool isMobile;
  final VoidCallback onAnyFieldChanged;

  const EventDetailsSection({
    super.key,
    required this.descriptionController,
    required this.installationController,
    required this.disassemblyController,
    required this.addressController,
    required this.jaugeController,
    required this.contactEmailController,
    required this.contactPhoneController,
    required this.isMobile,
    required this.onAnyFieldChanged,
  });

  @override
  State<EventDetailsSection> createState() => _EventDetailsSectionState();
}

class _EventDetailsSectionState extends State<EventDetailsSection> {
  int _descriptionMaxLines = 3;

  @override
  void initState() {
    super.initState();
    widget.descriptionController.addListener(_handleDescriptionChange);
  }

  @override
  void dispose() {
    widget.descriptionController.removeListener(_handleDescriptionChange);
    super.dispose();
  }

  void _handleDescriptionChange() {
    final lines = '\n'.allMatches(widget.descriptionController.text).length + 1;
    setState(() {
      _descriptionMaxLines = lines.clamp(3, 6);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: [
        _buildSectionTitle('Détails'),

        // Description et champs de contact
        widget.isMobile
          ? _buildMobileLayout()
          : _buildDesktopLayout(),

        const SizedBox(height: 20),

        // Installation et démontage
        Row(
          children: [
            Expanded(
              child: IntStepperField(
                label: 'Installation (h)',
                controller: widget.installationController,
                min: 0,
                max: 99,
              ),
            ),
            const SizedBox(width: 16),
            Expanded(
              child: IntStepperField(
                label: 'Démontage (h)',
                controller: widget.disassemblyController,
                min: 0,
                max: 99,
              ),
            ),
          ],
        ),

        _buildSectionTitle('Adresse*'),
        TextFormField(
          controller: widget.addressController,
          decoration: const InputDecoration(
            labelText: 'Adresse*',
            border: OutlineInputBorder(),
            prefixIcon: Icon(Icons.location_on),
          ),
          validator: (v) => v == null || v.isEmpty ? 'Champ requis' : null,
          onChanged: (_) => widget.onAnyFieldChanged(),
        ),
      ],
    );
  }

  Widget _buildMobileLayout() {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: [
        _buildDescriptionField(),
        const SizedBox(height: 16),
        _buildContactFields(),
      ],
    );
  }

  Widget _buildDesktopLayout() {
    return Row(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Expanded(
          flex: 2,
          child: _buildDescriptionField(),
        ),
        const SizedBox(width: 16),
        Expanded(
          flex: 1,
          child: _buildContactFields(),
        ),
      ],
    );
  }

  Widget _buildDescriptionField() {
    return AnimatedContainer(
      duration: const Duration(milliseconds: 200),
      constraints: BoxConstraints(
        minHeight: 48,
        maxHeight: widget.isMobile ? 48.0 * 20 : 48.0 * 10,
      ),
      child: TextFormField(
        controller: widget.descriptionController,
        minLines: 1,
        maxLines: _descriptionMaxLines > (widget.isMobile ? 20 : 10)
            ? (widget.isMobile ? 20 : 10)
            : _descriptionMaxLines,
        decoration: const InputDecoration(
          labelText: 'Description',
          border: OutlineInputBorder(),
          prefixIcon: Icon(Icons.description),
        ),
        onChanged: (_) => widget.onAnyFieldChanged(),
      ),
    );
  }

  Widget _buildContactFields() {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: [
        TextFormField(
          controller: widget.jaugeController,
          decoration: const InputDecoration(
            labelText: 'Jauge',
            border: OutlineInputBorder(),
            prefixIcon: Icon(Icons.people),
            hintText: 'Nombre de personnes',
          ),
          keyboardType: TextInputType.number,
          onChanged: (_) => widget.onAnyFieldChanged(),
        ),
        const SizedBox(height: 12),
        TextFormField(
          controller: widget.contactEmailController,
          decoration: const InputDecoration(
            labelText: 'Email de contact',
            border: OutlineInputBorder(),
            prefixIcon: Icon(Icons.email),
            hintText: 'contact@exemple.com',
          ),
          keyboardType: TextInputType.emailAddress,
          onChanged: (_) => widget.onAnyFieldChanged(),
        ),
        const SizedBox(height: 12),
        TextFormField(
          controller: widget.contactPhoneController,
          decoration: const InputDecoration(
            labelText: 'Téléphone de contact',
            border: OutlineInputBorder(),
            prefixIcon: Icon(Icons.phone),
            hintText: '06 12 34 56 78',
          ),
          keyboardType: TextInputType.phone,
          onChanged: (_) => widget.onAnyFieldChanged(),
        ),
      ],
    );
  }

  Widget _buildSectionTitle(String title) {
    return Padding(
      padding: const EdgeInsets.only(top: 16.0, bottom: 8.0),
      child: Align(
        alignment: Alignment.centerLeft,
        child: Text(
          title,
          style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
        ),
      ),
    );
  }
}
