import { NextResponse } from 'next/server'
import { getUserFromToken } from '@/lib/auth'
import { prisma } from '@/lib/db'

export const runtime = 'nodejs'

function getErrorMessages(locale: string = 'ro') {
  const messages = {
    ro: {
      unauthorized: 'Nu ești autentificat',
      bookmarkRequired: 'Informațiile bookmark-ului sunt obligatorii',
      bookmarkError: 'Eroare la salvarea bookmark-ului',
      bookmarkRemoved: 'Bookmark șters cu succes',
      bookmarkSaved: 'Bookmark salvat cu succes'
    },
    en: {
      unauthorized: 'Unauthorized',
      bookmarkRequired: 'Bookmark information is required',
      bookmarkError: 'Error saving bookmark',
      bookmarkRemoved: 'Bookmark removed successfully',
      bookmarkSaved: 'Bookmark saved successfully'
    }
  }
  return messages[locale as keyof typeof messages] || messages.ro
}

// GET - Get user's verse bookmarks
export async function GET(request: Request) {
  try {
    const url = new URL(request.url)
    const locale = url.searchParams.get('locale') || 'ro'
    const messages = getErrorMessages(locale)

    // Get token from authorization header
    const authHeader = request.headers.get('authorization')
    const token = authHeader?.replace('Bearer ', '')

    if (!token) {
      return NextResponse.json({ error: messages.unauthorized }, { status: 401 })
    }

    // Verify token and get user
    const user = await getUserFromToken(token)
    if (!user) {
      return NextResponse.json({ error: messages.unauthorized }, { status: 401 })
    }

    // Get user's verse bookmarks with verse and chapter information
    const bookmarks = await prisma.bookmark.findMany({
      where: {
        userId: user.id
      },
      include: {
        verse: {
          include: {
            chapter: {
              include: {
                book: {
                  include: {
                    version: true
                  }
                }
              }
            }
          }
        }
      },
      orderBy: {
        createdAt: 'desc'
      }
    })

    return NextResponse.json({ bookmarks })

  } catch (error) {
    console.error('Verse bookmark fetch error:', error)
    const url = new URL(request.url)
    const locale = url.searchParams.get('locale') || 'ro'
    const messages = getErrorMessages(locale)

    return NextResponse.json({ error: messages.bookmarkError }, { status: 500 })
  }
}

// POST - Create verse bookmark
export async function POST(request: Request) {
  try {
    const url = new URL(request.url)
    const locale = url.searchParams.get('locale') || 'ro'
    const messages = getErrorMessages(locale)

    // Get token from authorization header
    const authHeader = request.headers.get('authorization')
    const token = authHeader?.replace('Bearer ', '')

    if (!token) {
      return NextResponse.json({ error: messages.unauthorized }, { status: 401 })
    }

    // Verify token and get user
    const user = await getUserFromToken(token)
    if (!user) {
      return NextResponse.json({ error: messages.unauthorized }, { status: 401 })
    }

    // Parse request body
    const { verseId, note, color } = await request.json()

    // Validate input
    if (!verseId) {
      return NextResponse.json({ error: messages.bookmarkRequired }, { status: 400 })
    }

    // Create or update bookmark
    const bookmark = await prisma.bookmark.upsert({
      where: {
        userId_verseId: {
          userId: user.id,
          verseId: verseId
        }
      },
      update: {
        note: note || null,
        color: color || '#FFD700'
      },
      create: {
        userId: user.id,
        verseId: verseId,
        note: note || null,
        color: color || '#FFD700'
      },
      include: {
        verse: {
          include: {
            chapter: {
              include: {
                book: {
                  include: {
                    version: true
                  }
                }
              }
            }
          }
        }
      }
    })

    return NextResponse.json({
      message: messages.bookmarkSaved,
      bookmark
    })

  } catch (error) {
    console.error('Verse bookmark creation error:', error)
    const url = new URL(request.url)
    const locale = url.searchParams.get('locale') || 'ro'
    const messages = getErrorMessages(locale)

    return NextResponse.json({ error: messages.bookmarkError }, { status: 500 })
  }
}

// DELETE - Remove verse bookmark
export async function DELETE(request: Request) {
  try {
    const url = new URL(request.url)
    const locale = url.searchParams.get('locale') || 'ro'
    const verseId = url.searchParams.get('verseId')
    const messages = getErrorMessages(locale)

    // Get token from authorization header
    const authHeader = request.headers.get('authorization')
    const token = authHeader?.replace('Bearer ', '')

    if (!token) {
      return NextResponse.json({ error: messages.unauthorized }, { status: 401 })
    }

    // Verify token and get user
    const user = await getUserFromToken(token)
    if (!user) {
      return NextResponse.json({ error: messages.unauthorized }, { status: 401 })
    }

    // Validate input
    if (!verseId) {
      return NextResponse.json({ error: messages.bookmarkRequired }, { status: 400 })
    }

    // Delete bookmark
    await prisma.bookmark.delete({
      where: {
        userId_verseId: {
          userId: user.id,
          verseId: verseId
        }
      }
    })

    return NextResponse.json({
      message: messages.bookmarkRemoved
    })

  } catch (error) {
    console.error('Verse bookmark deletion error:', error)
    const url = new URL(request.url)
    const locale = url.searchParams.get('locale') || 'ro'
    const messages = getErrorMessages(locale)

    return NextResponse.json({ error: messages.bookmarkError }, { status: 500 })
  }
}