import { NextRequest, NextResponse } from 'next/server'
import prisma from '@/lib/prisma'
import { auth } from '@/auth'
import { revalidatePath } from 'next/cache'

const DEFAULT_COLORS = ['#3B82F6', '#8B5CF6', '#EC4899', '#F59E0B', '#10B981', '#06B6D4']
const DEFAULT_ICONS = ['📁', '📚', '💼', '🎯', '📊', '🎨', '💡', '🔧']

// GET /api/notebooks - Get all notebooks for current user
export async function GET(request: NextRequest) {
  const session = await auth()
  if (!session?.user?.id) {
    return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
  }

  try {
    const notebooks = await prisma.notebook.findMany({
      where: { userId: session.user.id },
      include: {
        labels: {
          orderBy: { name: 'asc' }
        },
        _count: {
          select: { notes: { where: { isArchived: false } } }
        }
      },
      orderBy: { order: 'asc' }
    })

    return NextResponse.json({
      success: true,
      notebooks: notebooks.map(nb => ({
        ...nb,
        notesCount: nb._count.notes
      }))
    })
  } catch (error) {
    console.error('Error fetching notebooks:', error)
    return NextResponse.json(
      { success: false, error: 'Failed to fetch notebooks' },
      { status: 500 }
    )
  }
}

// POST /api/notebooks - Create a new notebook
export async function POST(request: NextRequest) {
  const session = await auth()
  if (!session?.user?.id) {
    return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
  }

  try {
    const body = await request.json()
    const { name, icon, color } = body

    if (!name || typeof name !== 'string') {
      return NextResponse.json(
        { success: false, error: 'Notebook name is required' },
        { status: 400 }
      )
    }

    // Get the highest order value for this user
    const highestOrder = await prisma.notebook.findFirst({
      where: { userId: session.user.id },
      orderBy: { order: 'desc' },
      select: { order: true }
    })

    const nextOrder = (highestOrder?.order ?? -1) + 1

    // Create notebook
    const notebook = await prisma.notebook.create({
      data: {
        name: name.trim(),
        icon: icon || DEFAULT_ICONS[Math.floor(Math.random() * DEFAULT_ICONS.length)],
        color: color || DEFAULT_COLORS[Math.floor(Math.random() * DEFAULT_COLORS.length)],
        order: nextOrder,
        userId: session.user.id
      },
      include: {
        labels: true,
        _count: {
          select: { notes: { where: { isArchived: false } } }
        }
      }
    })

    revalidatePath('/')

    return NextResponse.json({
      success: true,
      ...notebook,
      notesCount: notebook._count.notes
    }, { status: 201 })
  } catch (error) {
    console.error('Error creating notebook:', error)
    return NextResponse.json(
      { success: false, error: 'Failed to create notebook' },
      { status: 500 }
    )
  }
}
