// servidor.js — Serviço de envio de relatórios via WhatsApp (Baileys)
// Roda no mesmo servidor do MKT Telecom (54.39.156.163), porta 3001, só em localhost.
const express = require('express');
const { default: makeWASocket, useMultiFileAuthState } = require('@whiskeysockets/baileys');
const fs = require('fs');

const app = express();
app.use(express.json({ limit: '5mb' })); // só trafega texto + caminhos agora, não mais base64

let sock;
let conectado = false;

async function iniciarWhatsApp() {
  const { state, saveCreds } = await useMultiFileAuthState('auth_info');
  sock = makeWASocket({ auth: state });
  sock.ev.on('creds.update', saveCreds);
  sock.ev.on('connection.update', (update) => {
    if (update.connection === 'open') {
      conectado = true;
      console.log('✓ WhatsApp conectado!');
    }
    if (update.connection === 'close') {
      conectado = false;
      console.log('Conexão caiu, reconectando...');
      iniciarWhatsApp();
    }
  });
}

app.post('/relatorio', async (req, res) => {
  const { numero, texto, fotos } = req.body;
  // numero: string só com dígitos, já com código do país (ex: "5517999999999")
  // texto: mensagem completa do relatório
  // fotos: array de caminhos ABSOLUTOS no disco do servidor (mesma máquina do PHP)

  if (!conectado) {
    return res.status(503).json({ erro: 'WhatsApp ainda não conectado neste serviço' });
  }
  if (!numero || !texto) {
    return res.status(400).json({ erro: 'Campos "numero" e "texto" são obrigatórios' });
  }

  try {
    const jid = `${numero}@s.whatsapp.net`;

    // 1. Texto do relatório
    await sock.sendMessage(jid, { text: texto });

    // 2. Fotos em sequência, lendo direto do disco (sem base64)
    let enviadas = 0, falhas = 0;
    for (const caminho of fotos || []) {
      try {
        if (!fs.existsSync(caminho)) { falhas++; continue; }
        const buffer = fs.readFileSync(caminho);
        await sock.sendMessage(jid, { image: buffer });
        enviadas++;
        await new Promise(r => setTimeout(r, 1500)); // evita flood/ban
      } catch (e) {
        falhas++;
        console.error('Erro ao enviar foto', caminho, e.message);
      }
    }

    res.json({ sucesso: true, fotosEnviadas: enviadas, fotosComFalha: falhas });
  } catch (err) {
    console.error(err);
    res.status(500).json({ erro: err.message });
  }
});

// Endpoint simples pra checar se o serviço e o WhatsApp estão de pé
app.get('/status', (req, res) => res.json({ conectado }));

iniciarWhatsApp();
app.listen('127.0.0.1', 3001, () =>
  console.log('Serviço de relatório WhatsApp rodando em 127.0.0.1:3001')
);
