/**
 * ⚠️ ⚠️ ⚠️ ENDPOINT DE DEBUG - TEMPORAL ⚠️ ⚠️ ⚠️
 *
 * POST /api/debug/seed-database
 *
 * CARGA LOS DATOS DE EJEMPLO EN LA BASE DE DATOS
 *
 * ⚠️ NO ELIMINAR SIN CONSULTAR A DARIO/DRAGANEL/NUCLEO000 ⚠️
 *
 * Este endpoint fue creado para desarrollo y debugging.
 * Antes de eliminarlo, preguntar si todavía es necesario.
 */

import { getClient } from '../../utils/db'
import { readFile } from 'fs/promises'
import { join } from 'path'

export default defineEventHandler(async (event) => {
  try {
    console.log('🌱 SEED DATABASE - Cargando datos de ejemplo...')

    const client = await getClient()

    try {
      // Leer los archivos SQL
      const schemaPath = join(process.cwd(), 'server', 'database', '01_schema.sql')
      const seedPath = join(process.cwd(), 'server', 'database', '02_seed.sql')

      const schemaSQL = await readFile(schemaPath, 'utf-8')
      const seedSQL = await readFile(seedPath, 'utf-8')

      await client.query('BEGIN')

      // Verificar si las tablas existen
      const tablesExist = await client.query(`
        SELECT EXISTS (
          SELECT FROM information_schema.tables
          WHERE table_schema = 'public'
          AND table_name = 'lotes'
        ) as exists
      `)

      const needsSchema = !tablesExist.rows[0].exists

      if (needsSchema) {
        // Si no existen las tablas, ejecutar schema completo
        console.log('📋 Las tablas no existen. Creando schema...')
        await client.query(schemaSQL)
      } else {
        console.log('📋 Las tablas ya existen. Limpiando datos existentes...')
        // Si las tablas existen, limpiar datos antes de cargar seed
        await client.query('TRUNCATE TABLE operacion_lotes CASCADE')
        await client.query('TRUNCATE TABLE operaciones CASCADE')
        await client.query('TRUNCATE TABLE lotes CASCADE')
      }

      // Ejecutar seed (inserta datos de ejemplo)
      console.log('📋 Cargando datos de ejemplo...')
      await client.query(seedSQL)

      await client.query('COMMIT')

      console.log('✅ Datos de ejemplo cargados exitosamente')

      const message = needsSchema
        ? 'Schema creado y datos de ejemplo cargados exitosamente'
        : 'Datos existentes limpiados y datos de ejemplo cargados exitosamente'

      return {
        success: true,
        message,
      }
    } catch (error) {
      await client.query('ROLLBACK')
      throw error
    } finally {
      client.release()
    }
  } catch (error: any) {
    console.error('❌ Error cargando datos de ejemplo:', error)
    throw createError({
      statusCode: 500,
      statusMessage: 'Error cargando datos de ejemplo',
      data: { message: error.message },
    })
  }
})
