<?php
// ajax/wa_status.php
// Retorna o status de conexão da instância Evolution API.
// Chamado via fetch() por os_detalhe.php -> verificarStatusWa()

require_once __DIR__ . '/../functions.php';
require_once __DIR__ . '/../auth.php';
requireLogin();

header('Content-Type: application/json; charset=utf-8');

$apiUrl    = rtrim(getConfig('wa_api_url', ''), '/');
$apiToken  = getConfig('wa_api_token', '');
$instancia = getConfig('wa_instancia', '');

if ($apiUrl === '' || $apiToken === '' || $instancia === '') {
    echo json_encode(['status' => 'nao_configurado', 'msg' => 'Evolution API não configurada']);
    exit;
}

$ch = curl_init($apiUrl . "/instance/connectionState/{$instancia}");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['apikey: ' . $apiToken],
    CURLOPT_TIMEOUT        => 8,
    CURLOPT_CONNECTTIMEOUT => 5,
]);
$resp = curl_exec($ch);
$err  = curl_error($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($resp === false) {
    echo json_encode(['status' => 'desconectado', 'msg' => "Sem resposta da API: $err"]);
    exit;
}

$data = json_decode($resp, true);

if ($code < 200 || $code >= 300) {
    $msg = $data['message'] ?? $data['error'] ?? "HTTP $code";
    echo json_encode(['status' => 'desconectado', 'msg' => is_array($msg) ? implode('; ', $msg) : $msg]);
    exit;
}

// Evolution API v2 retorna algo como { "instance": { "state": "open" } }
$state = $data['instance']['state'] ?? $data['state'] ?? '';

$map = [
    'open'         => 'conectado',
    'connecting'   => 'aguardando',
    'close'        => 'desconectado',
];

$status = $map[$state] ?? 'aguardando';
$msg = match ($status) {
    'conectado'    => 'WhatsApp conectado',
    'aguardando'   => 'Conectando... (' . ($state ?: 'desconhecido') . ')',
    'desconectado' => 'Instância desconectada — escaneie o QR Code',
    default        => $state,
};

$out = [
    'status'    => $status,
    'state_raw' => $state,
    'msg'       => $msg,
    'instancia' => $instancia,
];

// Se desconectado, busca o QR Code para o botão "📷 QR Code" da tela de configurações
if ($status !== 'conectado') {
    $chQr = curl_init($apiUrl . "/instance/connect/{$instancia}");
    curl_setopt_array($chQr, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER     => ['apikey: ' . $apiToken],
        CURLOPT_TIMEOUT        => 8,
        CURLOPT_CONNECTTIMEOUT => 5,
    ]);
    $respQr  = curl_exec($chQr);
    $codeQr  = curl_getinfo($chQr, CURLINFO_HTTP_CODE);
    curl_close($chQr);

    if ($respQr !== false && $codeQr >= 200 && $codeQr < 300) {
        $dataQr = json_decode($respQr, true);
        // Evolution API v2 retorna base64 em "base64" (com ou sem o prefixo data:image/png;base64,)
        $b64 = $dataQr['base64'] ?? $dataQr['qrcode']['base64'] ?? null;
        if ($b64) {
            $out['qrcode'] = str_starts_with($b64, 'data:') ? $b64 : ('data:image/png;base64,' . $b64);
        }
    }
}

echo json_encode($out);