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

import 'package:get/get.dart';
import 'package:velocity_x/velocity_x.dart';

import 'package:aku_community/widget/picker/bee_custom_picker.dart';

class BeeDatePicker {
  static Future<DateTime> pick(
    DateTime initDate, {
    CupertinoDatePickerMode mode = CupertinoDatePickerMode.date,
  }) async {
    return await Get.bottomSheet(_BeeDatePicker(
      date: initDate,
      mode: mode,
      min: DateTime.now().subtract(Duration(days: 1)),
    ));
  }

  static Future<DateTime> timePicker(DateTime initDate) async {
    return await Get.bottomSheet(_BeeDatePicker(
      date: initDate,
      min: initDate,
      max: initDate.add(Duration(days: 7)),
      mode: CupertinoDatePickerMode.dateAndTime,
    ));
  }
}

class _BeeDatePicker extends StatefulWidget {
  final DateTime date;
  final bool use24H;
  final DateTime max;
  final DateTime min;
  final CupertinoDatePickerMode mode;
  _BeeDatePicker({
    Key key,
    @required this.date,
    this.use24H = false,
    this.max,
    this.min,
    this.mode,
  }) : super(key: key);

  @override
  __BeeDatePickerState createState() => __BeeDatePickerState();
}

class __BeeDatePickerState extends State<_BeeDatePicker> {
  DateTime _date = DateTime.now();
  @override
  void initState() {
    super.initState();
    _date = widget.date ?? DateTime.now();
  }

  @override
  Widget build(BuildContext context) {
    return BeeCustomPicker(
      onPressed: () => Get.back(result: _date),
      body: CupertinoDatePicker(
        use24hFormat: widget.use24H,
        maximumDate: widget.max,
        minimumDate: widget.min,
        initialDateTime: _date,
        onDateTimeChanged: (date) => _date = date,
        mode: widget.mode ?? CupertinoDatePickerMode.date,
      ).expand(),
    );
  }
}