// ====================================
// SCRIPT DE INSTALACIÓN Y SETUP
// ====================================

/*
Este archivo documenta los pasos para configurar todo desde cero
*/

// ========== OPCIÓN 1: INSTALACIÓN LOCAL ==========

/*
LINUX (Ubuntu/Debian):
  
  1. Instalar MongoDB
     sudo apt-get update
     sudo apt-get install -y mongodb

  2. Iniciar el servicio
     sudo systemctl start mongod
     sudo systemctl enable mongod  # Para iniciarse automáticamente

  3. Verificar que está corriendo
     sudo systemctl status mongod

  4. Acceder a MongoDB
     mongosh


MACOS (con Homebrew):

  1. Instalar Homebrew si no lo tienes
     /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

  2. Instalar MongoDB
     brew tap mongodb/brew
     brew install mongodb-community

  3. Iniciar el servicio
     brew services start mongodb-community

  4. Verificar que funciona
     mongosh


WINDOWS:

  1. Descargar instalador de mongodb.com
     https://www.mongodb.com/try/download/community

  2. Ejecutar el instalador (.msi)

  3. El servicio debería iniciarse automáticamente

  4. Abrir terminal como administrador
     net start MongoDB

  5. Acceder a MongoDB
     mongosh
*/

// ========== OPCIÓN 2: USANDO DOCKER ==========

/*
Si tienes Docker instalado (recomendado para desarrollo):

  1. Descargar imagen de MongoDB
     docker pull mongo

  2. Crear contenedor
     docker run -d \
       --name mongodb \
       -p 27017:27017 \
       -e MONGO_INITDB_ROOT_USERNAME=admin \
       -e MONGO_INITDB_ROOT_PASSWORD=password \
       mongo

  3. Acceder a MongoDB
     docker exec -it mongodb mongosh -u admin -p password

  4. Parar contenedor
     docker stop mongodb

  5. Iniciar contenedor
     docker start mongodb

  6. Verificar que está corriendo
     docker ps
*/

// ========== OPCIÓN 3: MONGODB ATLAS (NUBE) ==========

/*
MongoDB Atlas es la opción en la nube de MongoDB:

  1. Ir a https://www.mongodb.com/cloud/atlas

  2. Crear cuenta (gratis)

  3. Crear cluster

  4. Copiar la cadena de conexión

  5. En .env, actualizar:
     MONGODB_URI=mongodb+srv://usuario:contraseña@cluster.mongodb.net/registro-app?retryWrites=true&w=majority

  6. Asegurarse de agregar IP whitelist
*/

// ========== VERIFICAR CONEXIÓN ==========

/*
Desde terminal:

  1. Conectar a MongoDB
     mongosh

  2. Mostrar bases de datos
     show dbs

  3. Crear/seleccionar BD
     use registro-app

  4. Ver colecciones
     show collections

  5. Ver versión
     db.version()

  6. Verificar que el usuario puede conectarse
     db.adminCommand("ping")

  7. Salir
     exit
*/

// ========== NPM SETUP ==========

/*
  1. Inicializar proyecto (si no lo hiciste ya)
     npm init -y

  2. Instalar dependencias principales
     npm install express mongoose dotenv cors

  3. Instalar dependencias de desarrollo
     npm install --save-dev nodemon

  4. Verificar que se instaló todo
     npm list

  5. Ejecutar en desarrollo
     npm run dev

  6. Ejecutar en producción
     npm start
*/

// ========== VERIFICACIÓN FINAL ==========

/*
Antes de usar la aplicación, verifica:

  ✓ MongoDB está ejecutándose
  ✓ Node.js está instalado (v14+)
  ✓ npm install completó sin errores
  ✓ .env tiene las configuraciones correctas
  ✓ Puerto 3000 está disponible
  ✓ Puedes acceder a http://localhost:3000

Si algo falla, ejecuta:
  npm install        # Reinstalar dependencias
  npm run dev        # Ver errores específicos
*/

// ========== SOLUCIONAR PROBLEMAS ==========

/*
PROBLEMA: "Cannot connect to MongoDB"
SOLUCIÓN:
  - Verificar que mongod está ejecutándose
  - Verificar MONGODB_URI en .env
  - Ejecutar: mongosh
  - Si falla, reinstalar MongoDB

PROBLEMA: "Port 3000 already in use"
SOLUCIÓN:
  - Cambiar puerto en .env
  - O findpid: lsof -i:3000
  - Matar proceso: kill -9 PID

PROBLEMA: "No such file or directory"
SOLUCIÓN:
  - Verificar que estás en la carpeta correcta
  - cd "examen ismael"
  - ls para ver los archivos

PROBLEMA: NPM packages no instalan
SOLUCIÓN:
  - Limpiar caché: npm cache clean --force
  - Eliminar node_modules: rm -rf node_modules package-lock.json
  - Reinstalar: npm install

PROBLEMA: Mongoose connection timeout
SOLUCIÓN:
  - MongoDB tarda en iniciar
  - Esperar 30 segundos y reintentar
  - Aumentar timeout en server.js si es necesario
*/

// ========== INFORMACIÓN ÚTIL ==========

/*
PUERTOS COMUNES:
  - MongoDB: 27017
  - Node.js: 3000 (nuestra app)
  - Express: 3000 (nuestra API)

ARCHIVOS IMPORTANTES:
  - server.js: Lógica del servidor
  - .env: Configuración sensible
  - package.json: Dependencias
  - public/index.html: Frontend

COMANDOS ÚTILES:
  - npm start: Ejecutar en prod
  - npm run dev: Ejecutar en desarrollo
  - npm list: Ver dependencias instaladas
  - npm update: Actualizar dependencias
  - npm audit: Ver vulnerabilidades
  - npm audit fix: Intentar arreglarlas
  - npm install [paquete]: Instalar nuevo paquete
  - npm uninstall [paquete]: Desinstalar paquete
*/
