import { NextRequest, NextResponse } from 'next/server'
import { createServerSupabaseClient } from '@/lib/supabase'
export async function POST(request: NextRequest) {
try {
const { userId } = await request.json()
if (!userId) {
return NextResponse.json({ error: 'User ID is required' }, { status: 400 })
}
const supabase = createServerSupabaseClient()
// Use the fast user_usage table via the database function
const { data: usageStats, error: usageError } = await supabase
.rpc('get_user_usage_stats', { p_user_id: userId })
if (usageError) {
console.error('Error getting usage stats:', usageError)
return NextResponse.json({ error: 'Failed to get usage data' }, { status: 500 })
}
// Get user's subscription to determine limits
const { data: subscriptionData, error: subscriptionError } = await supabase
.from('subscriptions')
.select('price_id, status')
.eq('user_id', userId)
.eq('status', 'active')
.order('created_at', { ascending: false })
.limit(1)
if (subscriptionError) {
console.error('Error getting subscription:', subscriptionError)
// Continue with free tier limits if subscription query fails
}
// Get the first subscription or null if none exists
const subscription = subscriptionData && subscriptionData.length > 0 ? subscriptionData[0] : null
// Default to free tier limits
const { PRICING_TIERS } = await import('@/lib/stripe')
let smartLimit = PRICING_TIERS.FREE.maxSmartPrompts
let fastLimit = PRICING_TIERS.FREE.hasUnlimitedFastPrompts ? 999999 : PRICING_TIERS.FREE.maxFastPrompts
// Set limits based on subscription
if (subscription?.price_id) {
// Import here to avoid circular dependencies
const { getPlanByPriceId } = await import('@/lib/stripe')
const plan = getPlanByPriceId(subscription.price_id)
if (plan) {
smartLimit = plan.maxSmartPrompts
fastLimit = plan.hasUnlimitedFastPrompts ? 999999 : plan.maxFastPrompts
}
}
// Extract usage counts from the stats
const smartUsage = usageStats?.current_month?.smart?.count || 0
const fastUsage = usageStats?.current_month?.fast?.count || 0
return NextResponse.json({
smartUsage,
fastUsage,
smartLimit,
fastLimit
})
} catch (error) {
console.error('Error in usage check:', error)
return NextResponse.json({ error: 'Internal server error' }, { status: 500 })
}
}