Untitled

 avatar
unknown
plain_text
9 months ago
2.5 kB
2
Indexable
import 'package:intl/intl.dart';

List<String> getPossibleSlots({
  required String duration,
  required String startTime,
  required String endTime,
  required String dateRange,
  required String bufferTimeBefore,
  required String bufferTimeAfter,
}) {
  // Parse time format
  final timeFormatter = DateFormat('hh:mm a');

  // Parse duration and buffer times
  final durationInMinutes = int.parse(duration.split(' ')[0]);
  final bufferBeforeInMinutes = int.parse(bufferTimeBefore.split(' ')[0]);
  final bufferAfterInMinutes = int.parse(bufferTimeAfter.split(' ')[0]);

  // Parse start and end times as DateTime objects
  final startDate = timeFormatter.parse(startTime);
  final endDate = timeFormatter.parse(endTime);

  // Calculate total available time in minutes (excluding buffer after)
  final totalAvailableMinutes = endDate.difference(startDate).inMinutes - bufferAfterInMinutes;

  // Check if there's enough time for at least one slot
  if (totalAvailableMinutes - durationInMinutes - bufferBeforeInMinutes < 0) {
    return [];
  }

  // List to store possible slots
  final slots = <String>[];

  // Current slot time
  var currentSlot = startDate;

  // Loop until current slot exceeds or meets end time (considering buffer after)
  while (currentSlot.isBefore(endDate) || currentSlot == endDate) {
    // Check if slot end time (including buffer after) would exceed end time
    final slotEndTime = currentSlot.add(Duration(minutes: durationInMinutes + bufferAfterInMinutes));
    if (slotEndTime.isAfter(endDate)) {
      break;
    }

    // Add current slot time to list
    slots.add(timeFormatter.format(currentSlot));

    // Calculate next slot start time with buffer and duration
    currentSlot = currentSlot.add(Duration(minutes: durationInMinutes + bufferBeforeInMinutes + bufferAfterInMinutes));
  }

  return slots;
}


void main() {
  // Sample input arguments
  final duration = "15 minutes";
  final startTime = "09:00 AM";
  final endTime = "11:00 AM";
  final dateRange = "30 days"; // Not used in this function currently
  final bufferTimeBefore = "0 minutes";
  final bufferTimeAfter = "0 minutes";

  // Call the function with arguments
  final possibleSlots = getPossibleSlots(
    duration: duration,
    startTime: startTime,
    endTime: endTime,
    dateRange: dateRange,
    bufferTimeBefore: bufferTimeBefore,
    bufferTimeAfter: bufferTimeAfter,
  );

  // Print the output list
  print(possibleSlots);
}
Editor is loading...
Leave a Comment