import 'package:date_field/date_field.dart';
import 'package:flutter/material.dart';

import '../../../Services/date_service.dart';

/// Ein Feld mit Popup über welches man Datumsfelder auswählen kann
class DynamicDateTimeField extends StatefulWidget {
  /// Initialisiert eine neue Instanz dieser Klasse
  const DynamicDateTimeField({
    this.initialValue,
    this.mode = DateTimeFieldPickerMode.date,
    this.autofocus = false,
    this.onChanged,
    this.decoration,
    super.key,
  });

  /// Der Initiale Wert des Input-Feldes
  final DateTime? initialValue;

  /// Der Modus des Datums-Feldes
  final DateTimeFieldPickerMode mode;

  /// Ob das Feld automatisch ausgewählt werden soll
  final bool autofocus;

  /// Die Funktion, die bei Veränderung des Wertes aufgerufen wird
  final Function(DateTime?)? onChanged;

  /// Die Dekoration, wie das Feld aussehen soll
  final InputDecoration? decoration;

  @override
  State<StatefulWidget> createState() => _DynamicDateTimeFieldState();
}

class _DynamicDateTimeFieldState extends State<DynamicDateTimeField> {
  DateTime? _value;

  @override
  void initState() {
    super.initState();
    _value = widget.initialValue;
  }

  @override
  Widget build(final BuildContext context) => DateTimeField(
    initialPickerDateTime: widget.initialValue,
    dateFormat: DateService.dateFormat,
    value: _value,
    mode: widget.mode,
    autofocus: widget.autofocus,
    onChanged: (final value) {
      widget.onChanged?.call(value);

      setState(() {
        _value = value;
      });
    },
    decoration: widget.decoration,
  );
}
