
import { PrismaClient } from '@prisma/client';
import bcryptjs from 'bcryptjs';
import { deportes } from '../lib/deportes';
import { ubicaciones } from '../lib/ubicaciones';

const prisma = new PrismaClient();

async function main() {
  console.log('🌱 Iniciando seed de la base de datos...');

  try {
    // 1. Crear usuario administrador
    console.log('👤 Creando usuario administrador...');
    const hashedPassword = await bcryptjs.hash('johndoe123', 12);
    
    await prisma.user.upsert({
      where: { email: 'john@doe.com' },
      update: {},
      create: {
        email: 'john@doe.com',
        name: 'John Doe',
        password: hashedPassword,
        rol: 'admin',
      },
    });

    // 2. Crear deportes
    console.log('⚽ Creando deportes...');
    for (const deporteData of deportes) {
      await prisma.deporte.upsert({
        where: { nombre: deporteData.nombre },
        update: {
          categorias: deporteData.categorias,
        },
        create: {
          nombre: deporteData.nombre,
          categorias: deporteData.categorias,
          activo: true,
        },
      });
    }

    // 3. Crear provincias y comunas
    console.log('📍 Creando provincias y comunas...');
    for (const ubicacionData of ubicaciones) {
      const provincia = await prisma.provincia.upsert({
        where: { nombre: ubicacionData.provincia },
        update: {},
        create: {
          nombre: ubicacionData.provincia,
        },
      });

      // Crear comunas para esta provincia
      for (const comunaNombre of ubicacionData.comunas) {
        await prisma.comuna.upsert({
          where: { 
            nombre_provinciaId: {
              nombre: comunaNombre,
              provinciaId: provincia.id
            }
          },
          update: {},
          create: {
            nombre: comunaNombre,
            provinciaId: provincia.id,
          },
        });
      }
    }

    // 4. Crear contenido inicial del sitio
    console.log('📄 Creando contenido inicial del sitio...');
    
    const contenidoInicial = [
      {
        clave: 'hero_titulo',
        titulo: 'Título Principal',
        contenido: 'BIENVENIDOS A ESCUELAS DEPORTIVAS',
        seccion: 'inicio',
        tipo: 'texto'
      },
      {
        clave: 'hero_subtitulo',
        titulo: 'Subtítulo Hero',
        contenido: 'Somos el primer y único centro nacional que unifica y respalda a todas las escuelas deportivas del país, creando un puente entre el talento deportivo juvenil y las oportunidades de desarrollo profesional.',
        seccion: 'inicio',
        tipo: 'texto'
      },
      {
        clave: 'busqueda_titulo',
        titulo: 'Título de Búsqueda',
        contenido: 'Búsqueda de Instructores y Escuelas Deportivas',
        seccion: 'inicio',
        tipo: 'texto'
      },
      {
        clave: 'busqueda_descripcion',
        titulo: 'Descripción de Búsqueda',
        contenido: 'Encuentra el instructor o escuela deportiva perfecta para ti',
        seccion: 'inicio',
        tipo: 'texto'
      },
      {
        clave: 'nosotros_titulo',
        titulo: 'Título Nosotros',
        contenido: 'ESCUELAS DEPORTIVAS DE CHILE',
        seccion: 'nosotros',
        tipo: 'texto'
      },
      {
        clave: 'nosotros_resumen',
        titulo: 'Resumen Programático',
        contenido: 'En nuestra plataforma puedes encontrar todos los programas y enlaces hacia las escuelas deportivas inscritas, obtener información de las actividades deportivas que ellas entregan. De estar disponible la información, también podrás saber si aún quedan cupos para el ingreso a los programas deportivos de cada una.',
        seccion: 'nosotros',
        tipo: 'texto'
      },
      {
        clave: 'acerca_titulo',
        titulo: 'Título Acerca De',
        contenido: 'ACERCA DE ESCUELAS DEPORTIVAS DE CHILE',
        seccion: 'acerca-de',
        tipo: 'texto'
      },
      {
        clave: 'acerca_descripcion',
        titulo: 'Descripción Acerca De',
        contenido: 'Somos el primer y único centro nacional que unifica y respalda a todas las escuelas deportivas del país, creando un puente entre el talento deportivo juvenil y las oportunidades de desarrollo profesional.\n\n¿Sabías que muchos talentos deportivos chilenos nunca llegan a desarrollar todo su potencial por falta de visibilidad y oportunidades? En Escuelas Deportivas de Chile trabajamos para cambiar esta realidad.',
        seccion: 'acerca-de',
        tipo: 'texto'
      },
      {
        clave: 'mision',
        titulo: 'Nuestra Misión',
        contenido: 'Somos una institución pionera dedicada a centralizar, validar y respaldar a las escuelas deportivas de Chile, facilitando el desarrollo del talento deportivo nacional desde sus bases.',
        seccion: 'acerca-de',
        tipo: 'texto'
      },
      {
        clave: 'vision',
        titulo: 'Nuestra Visión',
        contenido: 'Ser el referente nacional en la certificación y respaldo de escuelas deportivas, garantizando estándares de calidad que impulsen el desarrollo del deporte chileno.',
        seccion: 'acerca-de',
        tipo: 'texto'
      }
    ];

    for (const contenido of contenidoInicial) {
      await prisma.contenidoSitio.upsert({
        where: { clave: contenido.clave },
        update: {
          contenido: contenido.contenido,
          titulo: contenido.titulo,
        },
        create: contenido,
      });
    }

    // 5. Crear configuración inicial del sitio
    console.log('⚙️ Creando configuración inicial...');
    
    const configuracionInicial = [
      {
        clave: 'sitio_telefono',
        valor: '+56 9 7196 6555',
        descripcion: 'Teléfono de contacto principal',
        tipo: 'texto'
      },
      {
        clave: 'sitio_email',
        valor: 'contacto@escuelasdeportivaschile.cl',
        descripcion: 'Email de contacto principal',
        tipo: 'texto'
      },
      {
        clave: 'sitio_nombre',
        valor: 'Escuelas Deportivas Chile',
        descripcion: 'Nombre del sitio web',
        tipo: 'texto'
      },
      {
        clave: 'redes_sociales',
        valor: JSON.stringify({
          facebook: 'https://facebook.com/escuelasdeportivaschile',
          instagram: 'https://instagram.com/escuelasdeportivaschile',
          twitter: 'https://twitter.com/escuelasdeportivaschile',
          vimeo: 'https://vimeo.com/escuelasdeportivaschile'
        }),
        descripcion: 'Enlaces a redes sociales',
        tipo: 'json'
      }
    ];

    for (const config of configuracionInicial) {
      await prisma.configuracionSitio.upsert({
        where: { clave: config.clave },
        update: {
          valor: config.valor,
        },
        create: config,
      });
    }

    // 6. Crear álbumes de ejemplo para las galerías
    console.log('📸 Creando álbumes de ejemplo...');
    
    const albumesEjemplo = [
      {
        titulo: 'Torneo Nacional de Fútbol 2024',
        descripcion: 'Imágenes del torneo nacional de fútbol juvenil 2024',
        categoria: 'torneos',
        publico: true,
        destacado: true,
        orden: 1
      },
      {
        titulo: 'Instalaciones Deportivas',
        descripcion: 'Fotografías de las diferentes instalaciones deportivas afiliadas',
        categoria: 'instalaciones',
        publico: true,
        destacado: false,
        orden: 2
      },
      {
        titulo: 'Clases y Entrenamientos',
        descripcion: 'Actividades diarias en nuestras escuelas deportivas',
        categoria: 'clases',
        publico: true,
        destacado: false,
        orden: 3
      }
    ];

    for (const album of albumesEjemplo) {
      const existingAlbum = await prisma.album.findFirst({
        where: { titulo: album.titulo }
      });
      
      if (!existingAlbum) {
        await prisma.album.create({
          data: album,
        });
      }
    }

    console.log('✅ Seed completado exitosamente!');
    console.log('📊 Estadísticas:');
    console.log(`- Deportes creados: ${deportes.length}`);
    console.log(`- Provincias creadas: ${ubicaciones.length}`);
    console.log(`- Comunas creadas: ${ubicaciones.reduce((total, prov) => total + prov.comunas.length, 0)}`);
    console.log('- Contenido inicial: 10 elementos');
    console.log('- Configuración: 4 elementos');
    console.log('- Álbumes de ejemplo: 3 elementos');

  } catch (error) {
    console.error('❌ Error durante el seed:', error);
    throw error;
  }
}

main()
  .catch((e) => {
    console.error(e);
    process.exit(1);
  })
  .finally(async () => {
    await prisma.$disconnect();
  });
