// SPDX-FileCopyrightText: 2022 Iconica
//
// SPDX-License-Identifier: BSD-3-Clause

import 'package:flutter/material.dart';
import 'package:flutter_input_library/src/inputs/date_picker/date_picker_field.dart';
import 'package:intl/intl.dart';

enum FlutterFormDateTimeType {
  date,
  time,
  dateTime,
  range,
}

class FlutterFormInputDateTime extends StatelessWidget {
  const FlutterFormInputDateTime({
    required this.inputType,
    required this.dateFormat,
    this.decoration,
    this.style,
    super.key,
    this.label,
    this.showIcon = true,
    this.firstDate,
    this.lastDate,
    this.initialDate,
    this.initialDateTimeRange,
    this.initialTime,
    this.icon = Icons.calendar_today,
    this.initialValue,
    this.onChanged,
    this.onSaved,
    this.validator,
    this.autovalidateMode = AutovalidateMode.disabled,
    this.timePickerEntryMode = TimePickerEntryMode.dial,
    this.enabled = true,
    this.onTapEnabled = true,
  });
  final TextStyle? style;
  final InputDecoration? decoration;
  final Widget? label;
  final bool showIcon;
  final FlutterFormDateTimeType inputType;
  final DateFormat dateFormat;
  final DateTime? initialDate;
  final DateTimeRange? initialDateTimeRange;
  final TimeOfDay? initialTime;
  final DateTime? firstDate;
  final DateTime? lastDate;
  final IconData icon;
  final String? initialValue;
  final String? Function(String?)? validator;
  final void Function(String?)? onSaved;
  final void Function(String?)? onChanged;
  final AutovalidateMode autovalidateMode;
  final TimePickerEntryMode timePickerEntryMode;
  final bool enabled;
  final bool onTapEnabled;

  @override
  Widget build(BuildContext context) => DateTimeInputField(
        style: style,
        decoration: decoration,
        autovalidateMode: autovalidateMode,
        validator: validator,
        label: label,
        icon: icon,
        firstDate: firstDate,
        lastDate: lastDate,
        inputType: inputType,
        dateFormat: dateFormat,
        initialDate: initialDate,
        initialDateTimeRange: initialDateTimeRange,
        initialTime: initialTime,
        initialValue: initialValue,
        onChanged: (value) => onChanged?.call(value),
        onSaved: (value) => onSaved?.call(value),
        showIcon: showIcon,
        timePickerEntryMode: timePickerEntryMode,
        enabled: enabled,
        onTapEnabled: onTapEnabled,
      );
}
