import { Prisma } from "@capakraken/db";

export type TimelineBatchShiftMode = "move" | "resize-start" | "resize-end";

export function shiftTimelineAllocationWindow(input: {
  startDate: Date;
  endDate: Date;
  daysDelta: number;
  mode: TimelineBatchShiftMode;
}): { startDate: Date; endDate: Date } {
  const startDate = new Date(input.startDate);
  const endDate = new Date(input.endDate);

  if (input.mode === "move") {
    startDate.setDate(startDate.getDate() + input.daysDelta);
    endDate.setDate(endDate.getDate() + input.daysDelta);
    return { startDate, endDate };
  }

  if (input.mode === "resize-start") {
    startDate.setDate(startDate.getDate() + input.daysDelta);
    if (startDate > endDate) {
      startDate.setTime(endDate.getTime());
    }
    return { startDate, endDate };
  }

  endDate.setDate(endDate.getDate() + input.daysDelta);
  if (endDate < startDate) {
    endDate.setTime(startDate.getTime());
  }

  return { startDate, endDate };
}

export function buildTimelineBatchShiftAuditChanges(input: {
  mode: TimelineBatchShiftMode;
  daysDelta: number;
  count: number;
}): Prisma.InputJsonValue {
  return {
    operation: "batchShift",
    mode: input.mode,
    daysDelta: input.daysDelta,
    count: input.count,
  } as unknown as Prisma.InputJsonValue;
}
