// "Add to calendar"-Links für Google/Outlook — ergänzen den .ics-Download
// (api/orders/[orderId]/calendar.ics) für Leute, die lieber direkt in ihrem
// Web-Kalender statt über eine heruntergeladene Datei hinzufügen.
type EventInput = {
  title: string;
  start: Date;
  end?: Date | null;
  location?: string;
};

const DEFAULT_DURATION_MS = 60 * 60 * 1000;

function resolveEnd(start: Date, end?: Date | null): Date {
  return end && end.getTime() > start.getTime() ? end : new Date(start.getTime() + DEFAULT_DURATION_MS);
}

function formatUtc(d: Date): string {
  return d.toISOString().replace(/[-:]/g, "").split(".")[0] + "Z";
}

export function buildGoogleCalendarUrl({ title, start, end, location }: EventInput): string {
  const params = new URLSearchParams({
    action: "TEMPLATE",
    text: title,
    dates: `${formatUtc(start)}/${formatUtc(resolveEnd(start, end))}`,
  });
  if (location) params.set("location", location);
  return `https://calendar.google.com/calendar/render?${params.toString()}`;
}

export function buildOutlookCalendarUrl({ title, start, end, location }: EventInput): string {
  const params = new URLSearchParams({
    path: "/calendar/action/compose",
    rru: "addevent",
    subject: title,
    startdt: start.toISOString(),
    enddt: resolveEnd(start, end).toISOString(),
  });
  if (location) params.set("location", location);
  return `https://outlook.live.com/calendar/0/deeplink/compose?${params.toString()}`;
}
