const mysql = require("mysql2/promise");
const fs = require("fs");
require("dotenv").config();

async function setupDatabase() {
  console.log("🔧 Configurando banco de dados...\n");

  try {
    // Conectar ao MySQL sem especificar o banco
    const connection = await mysql.createConnection({
      host: process.env.DB_HOST,
      user: process.env.DB_USER,
      password: process.env.DB_PASSWORD,
      port: process.env.DB_PORT || 3306,
      multipleStatements: true,
    });

    console.log("✓ Conectado ao MySQL");

    // Ler o arquivo SQL
    const sqlScript = fs.readFileSync("./database.sql", "utf8");

    console.log("✓ Executando script SQL...");
    await connection.query(sqlScript);

    console.log('✓ Banco de dados "mapa" criado com sucesso!');
    console.log("✓ Tabelas criadas com sucesso!\n");

    await connection.end();

    // Agora importar os dados do veiculos.json
    console.log("📦 Importando dados do veiculos.json...\n");

    const jsonData = fs.readFileSync("./veiculos.json", "utf8");
    const dados = JSON.parse(jsonData);

    // Conectar ao banco mapa
    const dbConnection = await mysql.createConnection({
      host: process.env.DB_HOST,
      user: process.env.DB_USER,
      password: process.env.DB_PASSWORD,
      database: process.env.DB_NAME,
      port: process.env.DB_PORT || 3306,
    });

    console.log(`✓ Total de veículos a importar: ${dados.total_veiculos}`);

    await dbConnection.beginTransaction();

    // Registrar atualização
    await dbConnection.execute(
      "INSERT INTO atualizacoes (timestamp, total_veiculos) VALUES (?, ?)",
      [
        dados.timestamp || new Date(),
        dados.total_veiculos || dados.veiculos.length,
      ],
    );

    // Função para converter data
    function converterData(dataStr) {
      const [datePart, timePart] = dataStr.split(" ");
      const [dia, mes, ano] = datePart.split("/");
      return `${ano}-${mes}-${dia} ${timePart}`;
    }

    // Inserir veículos
    for (const veiculo of dados.veiculos) {
      const gruposStr = Array.isArray(veiculo.grupos)
        ? veiculo.grupos.join(",")
        : veiculo.grupos || "";

      const dataHoraMySQL = converterData(veiculo.data_hora);

      await dbConnection.execute(
        `
                INSERT INTO veiculos 
                (placa, identificacao_completa, data_hora, icone, velocidade, status, 
                 endereco, latitude, longitude, grupos, modelo_rastreador, id_sistema, operadora)
                VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
            `,
        [
          veiculo.placa,
          veiculo.identificacao_completa,
          dataHoraMySQL,
          veiculo.icone,
          veiculo.velocidade,
          veiculo.status,
          veiculo.endereco,
          veiculo.latitude,
          veiculo.longitude,
          gruposStr,
          veiculo.modelo_rastreador,
          veiculo.id_sistema,
          veiculo.operadora,
        ],
      );
    }

    await dbConnection.commit();
    await dbConnection.end();

    console.log(
      `✓ ${dados.veiculos.length} veículos importados com sucesso!\n`,
    );
    console.log("========================================");
    console.log("✨ Setup completo!");
    console.log("========================================");
    console.log("\n🚀 Agora execute: npm start");
    console.log("📍 Depois acesse: http://localhost:3000\n");
  } catch (error) {
    console.error("❌ Erro:", error.message);
    console.error("\n⚠️  Verifique:");
    console.error("   1. MySQL está rodando?");
    console.error("   2. Credenciais no .env estão corretas?");
    console.error("   3. Porta 3306 está acessível?");
    process.exit(1);
  }
}

setupDatabase();
