import { NextResponse } from 'next/server'
import { auth } from '@/lib/auth'
import { prisma } from '@/lib/prisma'
import { isAdmin } from '@/lib/admin'

export async function GET() {
  try {
    const session = await auth()

    if (!session?.user?.email || !isAdmin(session.user.email)) {
      return NextResponse.json(
        { success: false, error: 'Admin only' },
        { status: 403 }
      )
    }

    const now = new Date()
    const today = new Date(now.getFullYear(), now.getMonth(), now.getDate())
    const last7Days = new Date(today)
    last7Days.setDate(last7Days.getDate() - 7)

    console.log('Debug chart - today:', today.toISOString())
    console.log('Debug chart - last7Days:', last7Days.toISOString())

    // Get raw visitor data
    const rawVisitors = await prisma.visitor.findMany({
      where: {
        visitedAt: { gte: last7Days }
      },
      select: {
        ip: true,
        visitedAt: true,
        path: true
      },
      orderBy: { visitedAt: 'asc' }
    })

    console.log('Raw visitors count:', rawVisitors.length)
    console.log('Sample raw visitor:', rawVisitors[0])

    // Get daily visitors using the same query as stats API
    const dailyVisitors = await prisma.$queryRaw<{ date: string; count: bigint }[]>`
      SELECT DATE(visited_at) as date, COUNT(DISTINCT ip) as count
      FROM visitors
      WHERE visited_at >= ${last7Days.toISOString()}
      GROUP BY DATE(visited_at)
      ORDER BY date ASC
    `

    console.log('Daily visitors raw:', dailyVisitors)

    // Format for chart (should match frontend expectation)
    const chartData = []
    for (let i = 6; i >= 0; i--) {
      const d = new Date(today)
      d.setDate(d.getDate() - i)
      const dateStr = d.toISOString().split('T')[0]
      const dayData = dailyVisitors.find((v: any) => v.date === dateStr)

      chartData.push({
        date: dateStr,
        visitors: Number(dayData?.count || 0)
      })
    }

    console.log('Final chart data:', chartData)

    // Test data to ensure chart renders
    const testData = [
      { date: '2025-01-15', visitors: 5 },
      { date: '2025-01-16', visitors: 12 },
      { date: '2025-01-17', visitors: 8 },
      { date: '2025-01-18', visitors: 15 },
      { date: '2025-01-19', visitors: 3 },
      { date: '2025-01-20', visitors: 7 },
      { date: '2025-01-21', visitors: 10 }
    ]

    return NextResponse.json({
      success: true,
      data: {
        debug: {
          today: today.toISOString(),
          last7Days: last7Days.toISOString(),
          rawVisitorsCount: rawVisitors.length,
          rawVisitorSample: rawVisitors.slice(0, 3),
          dailyVisitorsRaw: dailyVisitors
        },
        chartData,
        testData,
        hasData: chartData.some(d => d.visitors > 0)
      }
    })

  } catch (error) {
    console.error('Debug chart error:', error)
    return NextResponse.json(
      { success: false, error: error instanceof Error ? error.message : String(error) },
      { status: 500 }
    )
  }
}