import 'package:flutter/material.dart';

/// Sous-barre : [À valider] | Gestionnaires | Parents | Assistantes maternelles | [Administrateurs].
/// [tabLabels] : liste des libellés d'onglets (ex. avec « À valider » en premier si dossiers en attente).
/// [subTabCount] = 3 pour masquer Administrateurs (dashboard gestionnaire).
class DashboardUserManagementSubBar extends StatelessWidget {
  final int selectedSubIndex;
  final ValueChanged<int> onSubTabChange;
  final TextEditingController searchController;
  final String searchHint;
  final Widget? filterControl;
  final VoidCallback? onAddPressed;
  final String addLabel;
  final int subTabCount;
  /// Si non null, utilisé à la place des labels par défaut (ex. ['À valider', 'Parents', ...]).
  final List<String>? tabLabels;

  static const List<String> _defaultTabLabels = [
    'Gestionnaires',
    'Parents',
    'Assistantes maternelles',
    'Administrateurs',
  ];

  const DashboardUserManagementSubBar({
    Key? key,
    required this.selectedSubIndex,
    required this.onSubTabChange,
    required this.searchController,
    required this.searchHint,
    this.filterControl,
    this.onAddPressed,
    this.addLabel = '+ Ajouter',
    this.subTabCount = 4,
    this.tabLabels,
  }) : super(key: key);

  List<String> get _labels => tabLabels ?? _defaultTabLabels.sublist(0, subTabCount.clamp(1, _defaultTabLabels.length));

  @override
  Widget build(BuildContext context) {
    final labels = _labels;
    return Container(
      height: 56,
      decoration: BoxDecoration(
        color: Colors.grey.shade100,
        border: Border(bottom: BorderSide(color: Colors.grey.shade300)),
      ),
      padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 6),
      child: Row(
        children: [
          for (int i = 0; i < labels.length; i++) ...[
            if (i > 0) const SizedBox(width: 12),
            _buildSubNavItem(context, labels[i], i),
          ],
          const SizedBox(width: 36),
          _pillField(
            width: 320,
            child: TextField(
              controller: searchController,
              decoration: InputDecoration(
                hintText: searchHint,
                prefixIcon: const Icon(Icons.search, size: 18),
                border: InputBorder.none,
                isDense: true,
                contentPadding: const EdgeInsets.symmetric(
                  horizontal: 10,
                  vertical: 8,
                ),
              ),
            ),
          ),
          if (filterControl != null) ...[
            const SizedBox(width: 12),
            _pillField(width: 150, child: filterControl!),
          ],
          const Spacer(),
          if (onAddPressed != null) _buildAddButton(),
        ],
      ),
    );
  }

  Widget _pillField({required double width, required Widget child}) {
    return Container(
      width: width,
      height: 34,
      decoration: BoxDecoration(
        color: Colors.white,
        borderRadius: BorderRadius.circular(18),
        border: Border.all(color: Colors.black26),
      ),
      alignment: Alignment.centerLeft,
      child: child,
    );
  }

  Widget _buildAddButton() {
    return ElevatedButton.icon(
      onPressed: onAddPressed,
      icon: const Icon(Icons.add),
      label: Text(addLabel),
    );
  }

  Widget _buildSubNavItem(BuildContext context, String title, int index) {
    final bool isActive = index == selectedSubIndex;
    return InkWell(
      onTap: () => onSubTabChange(index),
      child: Container(
        padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 6),
        decoration: BoxDecoration(
          color: isActive ? const Color(0xFF9CC5C0) : Colors.transparent,
          borderRadius: BorderRadius.circular(16),
          border: isActive ? null : Border.all(color: Colors.black26),
        ),
        child: Text(
          title,
          style: TextStyle(
            color: isActive ? Colors.white : Colors.black87,
            fontWeight: isActive ? FontWeight.w600 : FontWeight.normal,
            fontSize: 13,
          ),
        ),
      ),
    );
  }
}

/// Sous-barre Paramètres : Paramètres généraux | Paramètres territoriaux.
class DashboardSettingsSubBar extends StatelessWidget {
  final int selectedSubIndex;
  final ValueChanged<int> onSubTabChange;

  const DashboardSettingsSubBar({
    Key? key,
    required this.selectedSubIndex,
    required this.onSubTabChange,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
      height: 48,
      decoration: BoxDecoration(
        color: Colors.grey.shade100,
        border: Border(bottom: BorderSide(color: Colors.grey.shade300)),
      ),
      padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 6),
      child: Center(
        child: Row(
          mainAxisSize: MainAxisSize.min,
          children: [
            _buildSubNavItem(context, 'Paramètres généraux', 0),
            const SizedBox(width: 16),
            _buildSubNavItem(context, 'Paramètres territoriaux', 1),
          ],
        ),
      ),
    );
  }

  Widget _buildSubNavItem(BuildContext context, String title, int index) {
    final bool isActive = index == selectedSubIndex;
    return InkWell(
      onTap: () => onSubTabChange(index),
      child: Container(
        padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 6),
        decoration: BoxDecoration(
          color: isActive ? const Color(0xFF9CC5C0) : Colors.transparent,
          borderRadius: BorderRadius.circular(16),
          border: isActive ? null : Border.all(color: Colors.black26),
        ),
        child: Text(
          title,
          style: TextStyle(
            color: isActive ? Colors.white : Colors.black87,
            fontWeight: isActive ? FontWeight.w600 : FontWeight.normal,
            fontSize: 13,
          ),
        ),
      ),
    );
  }
}
