import 'package:flutter/cupertino.dart';

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

import 'package:aku_new_community/widget/picker/bee_custom_picker.dart';
import 'package:aku_new_community/widget/picker/bee_month_pick_body.dart';

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

  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,
    ));
  }

  static Future<DateTime?> monthPicker(DateTime initDate) async {
    return await Get.bottomSheet(
        BeeMonthPickBody(initTime: initDate)
    );
  }

}

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;
  }

  @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(),
    );
  }
}