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

const TASK_KEY = "manager-tasks";

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

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

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

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

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

export const useManagerDecideTask = (onSuccess?: () => void) => {
  const qc = useQueryClient();
  return useMutation({
    mutationFn: ({
      taskId,
      payload,
    }: {
      taskId: string;
      payload: { status: "APPROVED" | "REJECTED"; remarks?: string };
    }) => taskService.decideTask(taskId, payload),

    onSuccess: (res) => {
      qc.invalidateQueries({ queryKey: [TASK_KEY] });
      showToast.success(res.message || "Task decision saved.");
      onSuccess?.();
    },

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