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

// Ensure this route runs on the Node.js runtime (Prisma requires Node)
export const runtime = 'nodejs'

export async function GET(request: Request) {
  try {
    console.log('Books API called')
    const { searchParams } = new URL(request.url)
    const locale = searchParams.get('locale') || 'ro'
    const versionAbbr = searchParams.get('version') // Optional specific version
    console.log('Locale:', locale, 'Version:', versionAbbr)

    // Get the appropriate Bible version
    let bibleVersion
    const langCandidates = Array.from(new Set([locale, locale.toLowerCase(), locale.toUpperCase()]))
    if (versionAbbr) {
      // Use specific version if provided
      bibleVersion = await prisma.bibleVersion.findFirst({
        where: {
          abbreviation: versionAbbr,
          language: { in: langCandidates }
        }
      })
    } else {
      // Try default version for the language
      bibleVersion = await prisma.bibleVersion.findFirst({
        where: {
          language: { in: langCandidates },
          isDefault: true
        }
      })
      // Fallback: any version for the language
      if (!bibleVersion) {
        bibleVersion = await prisma.bibleVersion.findFirst({
          where: { language: { in: langCandidates } },
          orderBy: { createdAt: 'asc' }
        })
      }
      // Fallback: use English default if requested locale not found
      if (!bibleVersion && locale !== 'en') {
        bibleVersion = await prisma.bibleVersion.findFirst({
          where: { language: 'en', isDefault: true }
        })
      }
    }

    if (!bibleVersion) {
      return NextResponse.json({
        success: false,
        error: `No Bible version found for language: ${locale}`,
        books: []
      }, { status: 404 })
    }

    // Get books for this version
    const books = await prisma.bibleBook.findMany({
      where: {
        versionId: bibleVersion.id
      },
      orderBy: {
        orderNum: 'asc'
      },
      include: {
        chapters: {
          orderBy: {
            chapterNum: 'asc'
          },
          include: {
            _count: {
              select: {
                verses: true
              }
            }
          }
        }
      }
    })

    return NextResponse.json({
      success: true,
      version: {
        id: bibleVersion.id,
        name: bibleVersion.name,
        abbreviation: bibleVersion.abbreviation,
        language: bibleVersion.language
      },
      books: books.map(book => ({
        id: book.id,
        name: book.name,
        testament: book.testament,
        orderNum: book.orderNum,
        bookKey: book.bookKey,
        chapters: book.chapters.map(chapter => ({
          id: chapter.id,
          chapterNum: chapter.chapterNum,
          verseCount: chapter._count.verses
        }))
      }))
    })
  } catch (error) {
    console.error('Error fetching books:', error)
    return NextResponse.json(
      {
        success: false,
        error: 'Failed to fetch books',
        books: []
      },
      { status: 500 }
    )
  }
}
