"use client"
import ReminderForm from "./ReminderForm"
import { useUpdateReminder } from "@/lib/react-query/hooks/reminders"
import type { Reminder, CreateReminderPayload } from "@/types/reminders"
import { useTranslations } from "next-intl"

interface UpdateReminderMainProps {
  reminder: Reminder
  onSuccess?: () => void
  onCancel?: () => void
}

// Helper to check if two arrays are equal
function arraysEqual(a: string[], b: string[]): boolean {
  if (a.length !== b.length) return false
  const sortedA = [...a].sort()
  const sortedB = [...b].sort()
  return sortedA.every((val, idx) => val === sortedB[idx])
}

export function UpdateReminderMain({ reminder, onSuccess, onCancel }: UpdateReminderMainProps) {
  const updateReminderMutation = useUpdateReminder()
  const t = useTranslations()

  const onSubmit = async (data: CreateReminderPayload) => {
    // Only include fields that have changed
    const changedFields: Partial<CreateReminderPayload> = {}

    const isNewClient = reminder.type === "new_client"
    const isInactiveClient = reminder.type === "inactive_client"

    if (data.channels && !arraysEqual(data.channels, reminder.channels)) {
      changedFields.channels = data.channels
    }
    if (data.message !== reminder.message) {
      changedFields.message = data.message
    }
    if (data.isEnabled !== reminder.isEnabled) {
      changedFields.isEnabled = data.isEnabled
    }
    
    // Only check schedule if it's not a new client or inactive client
    if (!isNewClient && !isInactiveClient && data.schedule !== reminder.schedule) {
      changedFields.schedule = data.schedule
    }
    
    // Only check inactiveDays if it's an inactive client
    if (isInactiveClient && data.inactiveDays !== reminder.inactiveDays) {
      changedFields.inactiveDays = data.inactiveDays
    }

    // Only send request if there are changes
    if (Object.keys(changedFields).length === 0) {
      onSuccess?.()
      return
    }

    try {
      await updateReminderMutation.mutateAsync(
        { id: reminder._id, payload: changedFields },
        {
          onSuccess: onSuccess
        }
      )
    } catch (error) {
      console.error("UpdateReminderMain: Caught error during mutation:", error)
    }
  }

  return (
    <ReminderForm
      initialValues={reminder}
      onSubmit={onSubmit}
      isSubmitting={updateReminderMutation.isPending}
      submitLabel={t("reminders.form.buttons.saveChanges")}
      onCancel={onCancel}
    />
  )
}
