#!/usr/bin/env node
/**
 * Firebase Service Worker Config Generator
 *
 * Genera firebase-config.js para el Service Worker a partir de un archivo JSON.
 *
 * Uso:
 *   node generate-sw-config.js --input ./src/config/firebase.config.json --output ./src/firebase-config.js
 *
 * El archivo generado define:
 *   self.FIREBASE_CONFIG = { apiKey: "...", ... };
 *
 * Este archivo es importado por firebase-messaging-sw.js mediante importScripts().
 */

const fs = require('fs');
const path = require('path');

// Parse command line arguments
function parseArgs() {
  const args = process.argv.slice(2);
  const options = {
    input: null,
    output: null,
  };

  for (let i = 0; i < args.length; i++) {
    if (args[i] === '--input' && args[i + 1]) {
      options.input = args[++i];
    } else if (args[i] === '--output' && args[i + 1]) {
      options.output = args[++i];
    } else if (args[i] === '--help' || args[i] === '-h') {
      console.log(`
Firebase SW Config Generator

Uso:
  node generate-sw-config.js --input <json-file> --output <js-file>

Opciones:
  --input   Archivo JSON con la configuración de Firebase
  --output  Archivo JS de salida para el Service Worker
  --help    Muestra esta ayuda

Ejemplo:
  node generate-sw-config.js --input ./src/config/firebase.config.json --output ./src/firebase-config.js
      `);
      process.exit(0);
    }
  }

  return options;
}

function main() {
  const options = parseArgs();

  // Validate arguments
  if (!options.input) {
    console.error('Error: Se requiere --input <archivo.json>');
    process.exit(1);
  }

  if (!options.output) {
    console.error('Error: Se requiere --output <archivo.js>');
    process.exit(1);
  }

  // Resolve paths relative to current working directory
  const inputPath = path.resolve(process.cwd(), options.input);
  const outputPath = path.resolve(process.cwd(), options.output);

  // Check if input file exists
  if (!fs.existsSync(inputPath)) {
    console.error(`Error: No se encontró el archivo de entrada: ${inputPath}`);
    console.error('');
    console.error('Crea el archivo firebase.config.json con tu configuración de Firebase.');
    console.error('Puedes copiar firebase.config.example.json como base.');
    process.exit(1);
  }

  // Read and parse JSON
  let config;
  try {
    const jsonContent = fs.readFileSync(inputPath, 'utf8');
    config = JSON.parse(jsonContent);
  } catch (error) {
    console.error(`Error al leer/parsear ${inputPath}:`, error.message);
    process.exit(1);
  }

  // Validate required fields
  const requiredFields = [
    'apiKey',
    'authDomain',
    'projectId',
    'storageBucket',
    'messagingSenderId',
    'appId',
  ];

  const missingFields = requiredFields.filter((field) => !config[field]);
  if (missingFields.length > 0) {
    console.error('Error: Faltan campos requeridos en el JSON:');
    missingFields.forEach((field) => console.error(`  - ${field}`));
    process.exit(1);
  }

  // Generate output content
  const timestamp = new Date().toISOString();
  const outputContent = `/**
 * Firebase Configuration for Service Worker
 *
 * ARCHIVO GENERADO AUTOMÁTICAMENTE - NO EDITAR
 * Generado desde: ${path.basename(inputPath)}
 * Fecha: ${timestamp}
 *
 * Para cambiar la configuración, edita: ${path.basename(inputPath)}
 */

self.FIREBASE_CONFIG = ${JSON.stringify(config, null, 2)};
`;

  // Ensure output directory exists
  const outputDir = path.dirname(outputPath);
  if (!fs.existsSync(outputDir)) {
    fs.mkdirSync(outputDir, { recursive: true });
  }

  // Write output file
  try {
    fs.writeFileSync(outputPath, outputContent, 'utf8');
    console.log(`✓ Generado: ${outputPath}`);
    console.log(`  Proyecto: ${config.projectId}`);
  } catch (error) {
    console.error(`Error al escribir ${outputPath}:`, error.message);
    process.exit(1);
  }
}

main();
