import 'package:flutter/material.dart';

import '../../Entities/list_item.dart';

/// Eine editierbare Liste mit Funktionen zur Bearbeitung
class EditableList extends StatelessWidget {
  /// Erstellt eine neue Instanz dieser Klasse
  const EditableList({
    required this.name,
    required this.items,
    required this.onAdd,
    required this.onEdit,
    required this.onDelete,
    this.icon,
    this.addTooltip,
    this.menuTooltip,
    super.key,
  });

  /// Der Name, der oben angezeigt wird
  final String name;

  /// Die
  final List<ListItem> items;

  /// Die Funktion, die aufgerufen wird,
  /// wenn ein neuer Eintrag hinzugefügt werden soll
  final void Function() onAdd;

  /// Die Funktion, die beim umbenennen aufgerufen wird
  final void Function(int) onEdit;

  ///Die Funktion, die beim Löschen aufgerufen wird
  final void Function(int) onDelete;

  /// Das Icon, das angezeigt wird
  final Icon? icon;

  /// Der Tooltip, der beim erstellen-Button angezeigt wird
  final String? addTooltip;

  /// Der Tooltip, der auf dem Menü angezeigt wird
  final String? menuTooltip;

  @override
  Widget build(final BuildContext context) => Expanded(
    child: Column(
      children: [
        Row(
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          children: <Widget>[
            Text(
              name,
              style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
            ),
            IconButton(
              onPressed: onAdd,
              icon: const Icon(Icons.add),
              tooltip: addTooltip,
            ),
          ],
        ),
        const SizedBox(height: 8),
        Expanded(
          child: ListView.separated(
            itemCount: items.length,
            separatorBuilder: (_, _) => const Divider(),
            itemBuilder: (final context, final index) => ListTile(
              contentPadding: EdgeInsets.zero,
              title: Text(items[index].name),
              leading: icon,
              trailing: PopupMenuButton<String>(
                tooltip: menuTooltip,
                onSelected: (final value) {
                  if (value == 'edit') {
                    onEdit(items[index].id);
                  } else if (value == 'delete') {
                    onDelete(items[index].id);
                  }
                },
                itemBuilder: (_) => const [
                  PopupMenuItem(value: 'edit', child: Text('Bearbeiten')),
                  PopupMenuItem(value: 'delete', child: Text('Entfernen')),
                ],
              ),
            ),
          ),
        ),
      ],
    ),
  );
}
