import { QUERY_KEYS } from "@/utils/query-key";
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
import {
  getAdminUsers,
  getAdminUser,
  createAdminUser,
  updateAdminUser,
  deleteAdminUser,
} from "./_requests";
import {
  CreateAdminUserRequest,
  UpdateAdminUserRequest,
  AdminUserFilters,
} from "./_models";
import toast from "react-hot-toast";

export const useAdminUsers = (filters?: AdminUserFilters) => {
  return useQuery({
    queryKey: [QUERY_KEYS.GET_ADMIN_USERS, filters],
    queryFn: () => getAdminUsers(filters),
  });
};

export const useAdminUser = (id: string, enabled: boolean = true) => {
  return useQuery({
    queryKey: [QUERY_KEYS.GET_ADMIN_USER, id],
    queryFn: () => getAdminUser(id),
    enabled: enabled && !!id,
  });
};

export const useCreateAdminUser = () => {
  const queryClient = useQueryClient();

  return useMutation({
    mutationKey: [QUERY_KEYS.CREATE_ADMIN_USER],
    mutationFn: (userData: CreateAdminUserRequest) => createAdminUser(userData),
    onSuccess: (data) => {
      queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.GET_ADMIN_USERS] });
      toast.success("کاربر ادمین با موفقیت ایجاد شد");
    },
    onError: (error: any) => {
      console.error("Create admin user error:", error);
      toast.error(error?.message || "خطا در ایجاد کاربر ادمین");
    },
  });
};

export const useUpdateAdminUser = () => {
  const queryClient = useQueryClient();

  return useMutation({
    mutationKey: [QUERY_KEYS.UPDATE_ADMIN_USER],
    mutationFn: ({
      id,
      userData,
    }: {
      id: string;
      userData: UpdateAdminUserRequest;
    }) => updateAdminUser(id, userData),
    onSuccess: (data, variables) => {
      queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.GET_ADMIN_USERS] });
      queryClient.invalidateQueries({
        queryKey: [QUERY_KEYS.GET_ADMIN_USER, variables.id],
      });
      toast.success("کاربر ادمین با موفقیت به‌روزرسانی شد");
    },
    onError: (error: any) => {
      console.error("Update admin user error:", error);
      toast.error(error?.message || "خطا در به‌روزرسانی کاربر ادمین");
    },
  });
};

export const useDeleteAdminUser = () => {
  const queryClient = useQueryClient();

  return useMutation({
    mutationKey: [QUERY_KEYS.DELETE_ADMIN_USER],
    mutationFn: (id: string) => deleteAdminUser(id),
    onSuccess: () => {
      queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.GET_ADMIN_USERS] });
      toast.success("کاربر ادمین با موفقیت حذف شد");
    },
    onError: (error: any) => {
      console.error("Delete admin user error:", error);
      toast.error(error?.message || "خطا در حذف کاربر ادمین");
    },
  });
};
