import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient()

// Sample Bible data - Genesis 1:1-5 for demonstration
const sampleBibleData = {
  books: [
    {
      id: 1,
      name: "Geneza",
      testament: "Vechiul Testament",
      chapters: [
        {
          number: 1,
          verses: [
            {
              number: 1,
              text: "La început Dumnezeu a făcut cerurile și pământul."
            },
            {
              number: 2,
              text: "Pământul era pustiu și gol; peste adâncuri era întuneric, și Duhul lui Dumnezeu Se mișca pe deasupra apelor."
            },
            {
              number: 3,
              text: "Dumnezeu a zis: \"Să fie lumină!\" Și a fost lumină."
            },
            {
              number: 4,
              text: "Dumnezeu a văzut că lumina era bună; și Dumnezeu a despărțit lumina de întuneric."
            },
            {
              number: 5,
              text: "Dumnezeu a numit lumina zi, iar întunericul l-a numit noapte. Astfel, a fost o seară, și a fost o dimineață: ziua întâi."
            }
          ]
        }
      ]
    },
    {
      id: 2,
      name: "Exodul",
      testament: "Vechiul Testament",
      chapters: [
        {
          number: 1,
          verses: [
            {
              number: 1,
              text: "Iată numele fiilor lui Israel care au intrat în Egipt cu Iacob și au intrat fiecare cu familia lui:"
            }
          ]
        }
      ]
    },
    {
      id: 40,
      name: "Matei",
      testament: "Noul Testament",
      chapters: [
        {
          number: 1,
          verses: [
            {
              number: 1,
              text: "Cartea neamului lui Isus Hristos, fiul lui David, fiul lui Avraam."
            }
          ]
        }
      ]
    }
  ]
}

async function importBible() {
  console.log('Starting Bible import...')

  try {
    for (const book of sampleBibleData.books) {
      console.log(`Importing ${book.name}...`)

      // Create book
      await prisma.bibleBook.upsert({
        where: { id: book.id },
        update: {},
        create: {
          id: book.id,
          name: book.name,
          testament: book.testament,
          orderNum: book.id
        }
      })

      // Create chapters and verses
      for (const chapter of book.chapters) {
        const createdChapter = await prisma.bibleChapter.upsert({
          where: {
            bookId_chapterNum: {
              bookId: book.id,
              chapterNum: chapter.number
            }
          },
          update: {},
          create: {
            bookId: book.id,
            chapterNum: chapter.number
          }
        })

        // Create verses
        for (const verse of chapter.verses) {
          await prisma.bibleVerse.upsert({
            where: {
              chapterId_verseNum_version: {
                chapterId: createdChapter.id,
                verseNum: verse.number,
                version: 'RO'
              }
            },
            update: {},
            create: {
              chapterId: createdChapter.id,
              verseNum: verse.number,
              text: verse.text,
              version: 'RO'
            }
          })
        }
      }
    }

    console.log('Bible import completed successfully!')

    // Create search function after import
    await prisma.$executeRaw`
      CREATE OR REPLACE FUNCTION search_verses(search_query TEXT, limit_count INT DEFAULT 10)
      RETURNS TABLE(
        verse_id TEXT,
        book_name TEXT,
        chapter_num INT,
        verse_num INT,
        verse_text TEXT,
        rank REAL
      ) AS $$
      BEGIN
        RETURN QUERY
        SELECT
          v.id::TEXT,
          b.name,
          c."chapterNum",
          v."verseNum",
          v.text,
          CASE
            WHEN v.text ILIKE '%' || search_query || '%' THEN 1.0
            ELSE 0.5
          END as rank
        FROM "BibleVerse" v
        JOIN "BibleChapter" c ON v."chapterId" = c.id
        JOIN "BibleBook" b ON c."bookId" = b.id
        WHERE v.text ILIKE '%' || search_query || '%'
        ORDER BY rank DESC, b."orderNum", c."chapterNum", v."verseNum"
        LIMIT limit_count;
      END;
      $$ LANGUAGE plpgsql;
    `

    console.log('Search function created successfully!')

  } catch (error) {
    console.error('Error importing Bible:', error)
    throw error
  }
}

importBible()
  .then(() => {
    console.log('Import process completed')
    process.exit(0)
  })
  .catch((error) => {
    console.error('Import failed:', error)
    process.exit(1)
  })
  .finally(() => prisma.$disconnect())