import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_app/features/scene/bloc/effective_period/effect_period_bloc.dart';
import 'package:syncrow_app/features/scene/bloc/effective_period/effect_period_event.dart';
import 'package:syncrow_app/features/scene/enum/effective_period_options.dart';
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart';
import 'package:syncrow_app/utils/context_extension.dart';
import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
import 'package:time_picker_spinner/time_picker_spinner.dart';

class EffectPeriodHelper {
  static Future<List<String>?> showCustomTimePicker(
      BuildContext context) async {
    String selectedStartTime = "00:00";
    String selectedEndTime = "23:59";
    PageController pageController = PageController(initialPage: 0);

    DateTime startDateTime = DateTime(2022, 1, 1, 0, 0);
    DateTime endDateTime = DateTime(2022, 1, 1, 23, 59);

    context.customAlertDialog(
      alertBody: SizedBox(
        height: 250,
        child: PageView(
          controller: pageController,
          physics: const NeverScrollableScrollPhysics(),
          children: [
            _buildTimePickerPage(
              context: context,
              pageController: pageController,
              isStartTime: true,
              time: startDateTime,
              onTimeChange: (time) {
                selectedStartTime =
                    "${time.hour.toString().padLeft(2, '0')}:${time.minute.toString().padLeft(2, '0')}";
              },
            ),
            _buildTimePickerPage(
              context: context,
              pageController: pageController,
              isStartTime: false,
              time: endDateTime,
              onTimeChange: (time) {
                selectedEndTime =
                    "${time.hour.toString().padLeft(2, '0')}:${time.minute.toString().padLeft(2, '0')}";
              },
            ),
          ],
        ),
      ),
      title: "Custom",
      onConfirm: () {
        context.read<EffectPeriodBloc>().add(
              SetCustomTime(selectedStartTime, selectedEndTime),
            );
        context.read<EffectPeriodBloc>().add(
              const SetPeriod(EnumEffectivePeriodOptions.custom),
            );

        Navigator.of(context).pop();
      },
    );
    return null;
  }

  static Widget _buildTimePickerPage({
    required BuildContext context,
    required PageController pageController,
    required bool isStartTime,
    required DateTime time,
    required Function(DateTime) onTimeChange,
  }) {
    return Column(
      mainAxisSize: MainAxisSize.min,
      children: [
        Padding(
          padding: const EdgeInsets.symmetric(horizontal: 16),
          child: Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              if (!isStartTime)
                TextButton(
                  onPressed: () {
                    pageController.previousPage(
                      duration: const Duration(milliseconds: 300),
                      curve: Curves.easeIn,
                    );
                  },
                  child: const BodyMedium(text: "Start"),
                ),
              TextButton(
                onPressed: () {},
                child: BodyMedium(
                  text: isStartTime ? "Start" : "End",
                  style: context.bodyMedium.copyWith(
                    color: ColorsManager.primaryColor,
                  ),
                ),
              ),
              if (isStartTime)
                TextButton(
                  onPressed: () {
                    pageController.nextPage(
                      duration: const Duration(milliseconds: 300),
                      curve: Curves.easeIn,
                    );
                  },
                  child: const BodyMedium(text: "End"),
                ),
            ],
          ),
        ),
        TimePickerSpinner(
          is24HourMode: false,
          normalTextStyle: const TextStyle(
            fontSize: 24,
            color: Colors.grey,
          ),
          highlightedTextStyle: const TextStyle(
            fontSize: 24,
            color: ColorsManager.primaryColor,
          ),
          spacing: 20,
          itemHeight: 50,
          isForce2Digits: true,
          time: time,
          onTimeChange: onTimeChange,
        ),
        const SizedBox(height: 16),
      ],
    );
  }

  static String formatEnumValue(EnumEffectivePeriodOptions value) {
  switch (value) {
    case EnumEffectivePeriodOptions.allDay:
      return "All Day";
    case EnumEffectivePeriodOptions.daytime:
      return "Daytime";
    case EnumEffectivePeriodOptions.night:
      return "Night";
    case EnumEffectivePeriodOptions.custom:
      return "Custom";
    case EnumEffectivePeriodOptions.none:
      return "None";
    default:
      return "";
  }
}
}
