import type { RecurrencePattern, Task } from "@/types";

function addDays(date: Date, amount: number) {
  const next = new Date(date);
  next.setDate(next.getDate() + amount);
  return next;
}

function addMonths(date: Date, amount: number) {
  const next = new Date(date);
  next.setMonth(next.getMonth() + amount);
  return next;
}

export function getNextRecurringDeadline(task: Pick<Task, "deadline" | "created_at" | "recurrence_pattern" | "recurrence_interval">) {
  if (task.recurrence_pattern === "none") return null;

  const baseDate = new Date(task.deadline || task.created_at);
  const interval = Math.max(task.recurrence_interval || 1, 1);

  if (task.recurrence_pattern === "daily") {
    return addDays(baseDate, interval).toISOString();
  }

  if (task.recurrence_pattern === "weekly") {
    return addDays(baseDate, interval * 7).toISOString();
  }

  if (task.recurrence_pattern === "monthly") {
    return addMonths(baseDate, interval).toISOString();
  }

  return null;
}

export function recurrenceLabel(
  pattern: RecurrencePattern,
  interval = 1
) {
  if (pattern === "none") return "Does not repeat";

  const every = interval > 1 ? `Every ${interval}` : "Every";

  if (pattern === "daily") return `${every} day${interval > 1 ? "s" : ""}`;
  if (pattern === "weekly") return `${every} week${interval > 1 ? "s" : ""}`;
  if (pattern === "monthly") return `${every} month${interval > 1 ? "s" : ""}`;

  return "Custom repeat";
}
