<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);

require_once __DIR__ . '/../config/config.php';
require_once __DIR__ . '/../config/database.php';
require_once __DIR__ . '/../config/sefaz.php';

// Busca empresas
$stmt = $pdo->query("SELECT * FROM empresas");
$empresas = $stmt->fetchAll(PDO::FETCH_ASSOC);

if (!$empresas) {
    echo "Nenhuma empresa cadastrada.\n";
    exit;
}

foreach ($empresas as $empresa) {

    echo "Consultando empresa: {$empresa['razao_social']} ({$empresa['cnpj']})\n";

    try {
        $tools = getTools($empresa);
        $ultimoNsu = (int)$empresa['ultimo_nsu'];

        $response = $tools->sefazDistDFe($empresa['cnpj'], $ultimoNsu);
        $xml = simplexml_load_string($response);

        if (!$xml) {
            echo "Resposta inválida da SEFAZ.\n";
            continue;
        }

        // Verifica status
        $cStat = (string)$xml->cStat ?? '';
        $xMotivo = (string)$xml->xMotivo ?? '';

        echo "Status SEFAZ: {$cStat} - {$xMotivo}\n";

        // NÃO há documentos
        if (
            !isset($xml->loteDistDFeInt->docZip) ||
            empty($xml->loteDistDFeInt->docZip)
        ) {
            echo "Nenhum DF-e disponível para esta empresa.\n\n";
            continue;
        }

        foreach ($xml->loteDistDFeInt->docZip as $doc) {

            $conteudo = gzdecode(base64_decode((string)$doc));
            $nsu = (string)$doc['NSU'];
            $chave = substr($conteudo, strpos($conteudo, '<chNFe>') + 7, 44);

            $dir = XML_PATH . date('Y') . '/';
            if (!is_dir($dir)) {
                mkdir($dir, 0777, true);
            }

            $arquivo = $dir . $chave . '.xml';
            file_put_contents($arquivo, $conteudo);

            $pdo->prepare("
                INSERT IGNORE INTO notas_fiscais
                (empresa_id, chave, xml_path)
                VALUES (?, ?, ?)
            ")->execute([
                $empresa['id'],
                $chave,
                $arquivo
            ]);

            $ultimoNsu = (int)$nsu;

            echo "XML salvo: {$chave}.xml\n";
        }

        // Atualiza NSU
        $pdo->prepare("
            UPDATE empresas SET ultimo_nsu = ? WHERE id = ?
        ")->execute([$ultimoNsu, $empresa['id']]);

        echo "NSU atualizado para: {$ultimoNsu}\n\n";

    } catch (Exception $e) {
        echo "Erro na empresa {$empresa['razao_social']}: " . $e->getMessage() . "\n\n";
    }
}
