import { useAuthContext } from "@/contexts/AuthContext";
import { useMutation, useQueryClient } from "@tanstack/react-query";
import firestore from "@react-native-firebase/firestore";
import { IBrainDump } from "@/contexts/DumpContext";

interface UpdateNoteParams {
  id: number;
  changes: Partial<IBrainDump>;
}

export const useUpdateNote = () => {
  const { user: currentUser } = useAuthContext();
  const queryClient = useQueryClient();

  return useMutation({
    mutationKey: ["updateNote"],
    mutationFn: async ({ id, changes }: UpdateNoteParams) => {
      try {
        const snapshot = await firestore()
          .collection("BrainDumps")
          .where("id", "==", id)
          .get();

        if (snapshot.empty) {
          throw new Error("Note not found");
        }

        const docId = snapshot.docs[0].id;
        const noteData = snapshot.docs[0].data();

        if (noteData.creatorId !== currentUser?.uid) {
          throw new Error(
            "Unauthorized: You can only update your own note"
          );
        }

        await firestore()
          .collection("BrainDumps")
          .doc(docId)
          .update({
            ...changes,
            updatedAt: firestore.FieldValue.serverTimestamp(),
            lastModifiedBy: currentUser?.uid,
          });

        return {
          id,
          ...noteData,
          ...changes,
        };
      } catch (e) {
        console.error("Error updating note: ", e);
        throw e;
      }
    },
    onSuccess: (updatedNote) => {
      queryClient.invalidateQueries({queryKey: ["braindumps"]});

      queryClient.setQueryData(
        ["feedback", updatedNote.id],
        updatedNote
      );
    },
  });
};
