import { useMutation } from "@tanstack/react-query"
import { canUseWritingCheck, recordWritingCheckUsage } from "@/utils/rate-limiter"
import { useAuthStore } from "@/store/auth-store"
import { supabase } from "@/lib/supabase"
import { saveWritingSubmission, countTodayWritingSubmissions } from "@/lib/progress-service"
import type { WritingFeedback } from "@/types"

const AUTH_DAILY_LIMIT = 10
const GUEST_DAILY_LIMIT = 3

async function callEdgeFunction(content: string): Promise<WritingFeedback> {
  const { data, error } = await supabase.functions.invoke<WritingFeedback>("writing-check", {
    body: { content },
  })

  if (error) throw new Error(error.message ?? "Đã có lỗi khi chấm bài. Vui lòng thử lại.")
  if (!data) throw new Error("Phản hồi từ AI không hợp lệ. Vui lòng thử lại.")

  return data
}

export function useWritingCheck() {
  return useMutation({
    mutationFn: async (content: string): Promise<WritingFeedback> => {
      const user = useAuthStore.getState().user

      if (user) {
        // Server-side rate limit for authenticated users (10/day)
        const usedToday = await countTodayWritingSubmissions(user.id)
        if (usedToday >= AUTH_DAILY_LIMIT) {
          throw new Error(`Bạn đã dùng hết ${AUTH_DAILY_LIMIT} lần kiểm tra hôm nay. Quay lại vào ngày mai!`)
        }
      } else {
        // localStorage rate limit for guests (3/day)
        if (!canUseWritingCheck()) {
          throw new Error(`Bạn đã dùng hết ${GUEST_DAILY_LIMIT} lần kiểm tra hôm nay. Đăng ký để được 10 lần/ngày!`)
        }
      }

      const feedback = await callEdgeFunction(content)

      if (user) {
        // Save submission to DB (fire-and-forget)
        saveWritingSubmission(user.id, content, feedback)
      } else {
        recordWritingCheckUsage()
      }

      return feedback
    },
  })
}
