"use client"
import { useMutation, useQuery } from "@tanstack/react-query"
import {
  fetchSubscriptionPlans,
  fetchUserSubscription,
  subscribeToNewPlan,
  getSubscriptionPlans,
  getUserSubscription,
  subscribeToPlan
} from "../queries/subscriptions"
import type { SubscriptionPlan, UserSubscription, SubscribePayload } from "@/types/subscriptions"
import { useToaster } from "@/context/ToasterContext"
import { queryClient } from "../client"

export function useGetSubscriptionPlans() {
  return useQuery<SubscriptionPlan[]>({
    queryKey: getSubscriptionPlans,
    queryFn: fetchSubscriptionPlans,
    refetchOnWindowFocus: false,
    staleTime: 5 * 60 * 1000 // 5 minutes
  })
}

export function useGetUserSubscription() {
  return useQuery<UserSubscription>({
    queryKey: getUserSubscription,
    queryFn: fetchUserSubscription,
    refetchOnWindowFocus: false,
    staleTime: 1 * 60 * 1000 // 1 minute
  })
}

export function useSubscribeToPlan() {
  const toast = useToaster()
  return useMutation({
    mutationKey: subscribeToPlan,
    mutationFn: (payload: SubscribePayload) => subscribeToNewPlan(payload),
    onSuccess: data => {
      toast.showSuccess("Successfully subscribed to the plan!")
      queryClient.invalidateQueries({ queryKey: getUserSubscription })
      queryClient.invalidateQueries({ queryKey: getSubscriptionPlans })
    },
    onError: (error: any) => {
      console.error("Subscription failed:", error)
      const message = error?.response?.data?.message || "Failed to subscribe. Please try again."
      toast.showError(message)
    }
  })
}
