import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import { PaginationParams } from "@/lib/pagination";
import { showToast } from "@/lib/toast";
import { taskService } from "../services/task.service";
import { TaskApprovalPayload } from "../types";

const TASK_KEY = "employee-tasks";

export const useGetEmployeeTasks = (params: PaginationParams) =>
  useQuery({
    queryKey: [TASK_KEY, "list", params],
    queryFn: () => taskService.getEmployeeTasks(params),
    placeholderData: (prev) => prev,
  });

export const useGetEmployeeTask = (taskId: string) =>
  useQuery({
    queryKey: [TASK_KEY, "detail", taskId],
    queryFn: () => taskService.getEmployeeTask(taskId),
    placeholderData: (prev) => prev,
  });

export const useApproveTask = (onSuccess?: () => void) => {
  const qc = useQueryClient();
  return useMutation({
    mutationFn: ({
      taskId,
      payload,
    }: {
      taskId: string;
      payload: TaskApprovalPayload;
    }) => taskService.approveTask(taskId, payload),

    onSuccess: (res) => {
      qc.invalidateQueries({ queryKey: [TASK_KEY] });
      // qc.invalidateQueries({ queryKey: ["tasks"] });

      showToast.success(res.message || "Documents verified successfully.");

      onSuccess?.();
    },

    onError: (err: any) => {
      showToast.error(
        err?.response?.data?.message || "Failed to verify documents.",
      );
    },
  });
};

export const useEmployeeApproveTask = (onSuccess?: () => void) => {
  const qc = useQueryClient();
  return useMutation({
    mutationFn: ({
      taskId,
      payload,
    }: {
      taskId: string;
      payload: { remarks?: string };
    }) => taskService.approveTaskFully(taskId, payload),

    onSuccess: (res) => {
      qc.invalidateQueries({ queryKey: [TASK_KEY] });
      qc.invalidateQueries({ queryKey: ["tasks"] });
      showToast.success(res.message || "Task approved and sent to manager.");
      onSuccess?.();
    },

    onError: (err: any) => {
      showToast.error(
        err?.response?.data?.message || "Failed to approve task.",
      );
    },
  });
};
