import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
import {
  getChatList,
  createChat,
  markChatAsRead,
  getChatDetail,
} from "../service/Service";
import { CreateChatRequest } from "../types/ProfileTypes";

// Get chat list
export const useChatList = (options?: { enabled?: boolean }) => {
  return useQuery({
    queryKey: ["chat", "list"],
    queryFn: getChatList,
    staleTime: 1000 * 60 * 5, // 5 minutes
    enabled: options?.enabled ?? true,
  });
};

// Create new chat
export const useCreateChat = () => {
  const queryClient = useQueryClient();

  return useMutation({
    mutationFn: (chatData: CreateChatRequest) => createChat(chatData),
    onSuccess: () => {
      // Invalidate chat list to refetch
      queryClient.invalidateQueries({ queryKey: ["chat", "list"] });
    },
  });
};

// Mark chat as read
export const useMarkChatAsRead = () => {
  const queryClient = useQueryClient();

  return useMutation({
    mutationFn: (chatId: string) => {
      console.log("📤 ارسال درخواست markAsRead برای:", chatId);
      return markChatAsRead(chatId);
    },
    retry: (failureCount, error: unknown) => {
      // اگر ۴۰۴ است، retry نکن
      const axiosError = error as { response?: { status?: number } };
      if (axiosError?.response?.status === 404) {
        console.log("ℹ️ چت یافت نشد یا قبلاً mark شده - retry نمی‌کنیم");
        return false;
      }
      // برای سایر خطاها، حداکثر ۱ بار retry کن
      return failureCount < 1;
    },
    retryDelay: 1000,
    onSuccess: (_, chatId) => {
      console.log(
        "✅ پیام‌ها با موفقیت به عنوان خوانده شده علامت‌گذاری شدند:",
        chatId
      );
      // Update chat list to reflect read status
      queryClient.invalidateQueries({ queryKey: ["chat", "list"] });
      // Update messages to mark as read
      queryClient.invalidateQueries({ queryKey: ["chat", "messages", chatId] });
    },
    onError: (error: unknown, chatId) => {
      console.error("❌ خطا در markAsRead:", chatId, error);
      // اگر ۴۰۴ دریافت کردیم، شاید چت وجود ندارد یا قبلاً mark شده
      const axiosError = error as { response?: { status?: number } };
      if (axiosError?.response?.status === 404) {
        console.log("ℹ️ چت یافت نشد یا قبلاً mark شده:", chatId);
      }
    },
  });
};

export const useChatDetail = (chatId?: string) => {
  return useQuery({
    queryKey: ["chat", "detail", chatId],
    queryFn: () => getChatDetail(chatId!),
    enabled: !!chatId,
  });
};
