import { differenceInCalendarDays, isWeekend, eachDayOfInterval, parseISO } from "date-fns";

export function calculateBusinessDays(startDate: string, endDate: string): number {
  const start = parseISO(startDate);
  const end = parseISO(endDate);

  if (start > end) return 0;

  const days = eachDayOfInterval({ start, end });
  return days.filter((day) => !isWeekend(day)).length;
}

export function getStatusColor(status: string): string {
  switch (status) {
    case "PENDING": return "bg-yellow-100 text-yellow-800";
    case "APPROVED": return "bg-green-100 text-green-800";
    case "REJECTED": return "bg-red-100 text-red-800";
    case "CANCELLED": return "bg-gray-100 text-gray-800";
    default: return "bg-gray-100 text-gray-800";
  }
}

export function getStatusBadgeVariant(status: string): "default" | "secondary" | "destructive" | "outline" {
  switch (status) {
    case "PENDING": return "secondary";
    case "APPROVED": return "default";
    case "REJECTED": return "destructive";
    case "CANCELLED": return "outline";
    default: return "outline";
  }
}

export function formatDate(date: string | Date): string {
  return new Date(date).toLocaleDateString("en-US", {
    year: "numeric",
    month: "short",
    day: "numeric",
  });
}
