import 'package:intl/intl.dart';

/// Format a DateTime to a readable string format (e.g., "12 Jan 2023")
String formatDate(DateTime date) {
  return DateFormat('d MMM yyyy').format(date);
}

/// Format a DateTime to a readable string format with time (e.g., "12 Jan 2023, 14:30")
String formatDateWithTime(DateTime date) {
  return DateFormat('d MMM yyyy, HH:mm').format(date);
}

/// Format a DateTime to show only the day and month (e.g., "12 Jan")
String formatDayMonth(DateTime date) {
  return DateFormat('d MMM').format(date);
}

/// Format a DateTime to show only the month and year (e.g., "Jan 2023")
String formatMonthYear(DateTime date) {
  return DateFormat('MMM yyyy').format(date);
}

/// Calculate the difference between two dates in days
int daysBetween(DateTime from, DateTime to) {
  from = DateTime(from.year, from.month, from.day);
  to = DateTime(to.year, to.month, to.day);
  return (to.difference(from).inHours / 24).round();
}

/// Returns a human-readable string representing the time elapsed since the given date
String timeAgo(DateTime date) {
  final difference = DateTime.now().difference(date);
  
  if (difference.inDays > 365) {
    return '${(difference.inDays / 365).floor()} tahun yang lalu';
  } else if (difference.inDays > 30) {
    return '${(difference.inDays / 30).floor()} bulan yang lalu';
  } else if (difference.inDays > 0) {
    return '${difference.inDays} hari yang lalu';
  } else if (difference.inHours > 0) {
    return '${difference.inHours} jam yang lalu';
  } else if (difference.inMinutes > 0) {
    return '${difference.inMinutes} menit yang lalu';
  } else {
    return 'Baru saja';
  }
} 