<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);


require_once 'includes/funcoes.php';
session_start();

$pdo = conectarBanco();

// Processar emissão em lote via AJAX
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['notas_ids'])) {
    header('Content-Type: application/json');
    
    $notas_ids = $_POST['notas_ids'];
    $resultados = [];
    
    foreach ($notas_ids as $nota_id) {
        // Buscar dados da nota
        $stmt = $pdo->prepare("
            SELECT n.*, 
                   e.token, e.ambiente, e.optante_simples,
                   em.cnpj as emitente_cnpj, 
                   em.inscricao_municipal as emitente_inscricao,
                   em.codigo_municipio as emitente_codigo_municipio,
                   t.cnpj as tomador_cnpj, 
                   t.cpf as tomador_cpf, 
                   t.razao_social as tomador_razao,
                   t.email as tomador_email,
                   t.telefone as tomador_telefone,
                   t.logradouro as tomador_logradouro,
                   t.numero as tomador_numero,
                   t.bairro as tomador_bairro,
                   t.codigo_municipio as tomador_codigo_municipio,
                   t.cep as tomador_cep
            FROM notas_fiscais n
            JOIN empresas e ON n.empresa_id = e.id
            JOIN emitentes em ON n.emitente_id = em.id
            JOIN tomadores t ON n.tomador_id = t.id
            WHERE n.id = ?
        ");
        $stmt->execute([$nota_id]);
        $nota = $stmt->fetch(PDO::FETCH_ASSOC);
        
        if (!$nota) {
            $resultados[] = ['id' => $nota_id, 'sucesso' => false, 'erro' => 'Nota não encontrada'];
            continue;
        }
        
        // Montar payload no mesmo formato do emitir.php
        $payload = [
            'empresa_id' => $nota['empresa_id'],
            'emitente' => [
                'id' => $nota['emitente_id'],
                'cnpj' => $nota['emitente_cnpj'],
                'inscricao_municipal' => $nota['emitente_inscricao'],
                'codigo_municipio' => $nota['emitente_codigo_municipio']
            ],
            'tomador' => [
                'id' => $nota['tomador_id'],
                'cnpj' => $nota['tomador_cnpj'],
                'cpf' => $nota['tomador_cpf'],
                'razao_social' => $nota['tomador_razao'],
                'email' => $nota['tomador_email']
            ],
            'nota' => [
                'ref' => $nota['ref'] . '_retry_' . time(),
                'codigo_servico' => $nota['codigo_servico'],
                'valor_servico' => (float)$nota['valor_servico'],
                'descricao' => $nota['discriminacao_servico'],
                'aliquota' => (float)$nota['aliquota'],
                'tipo_retencao_iss' => $nota['iss_retido'] == 1 ? 2 : 1,
                'codigo_opcao_simples_nacional' => $nota['optante_simples'] == 1 ? 3 : 1,
                'codigo_tributario_municipal' => '',
                'codigo_nbs' => '121012200',
                'data_emissao' => date('Y-m-d H:i:s'),
                'data_competencia' => date('Y-m-d'),
                'observacoes' => 'Reenvio automático via lote'
            ]
        ];
        
        // Chamar emitir.php via cURL interno
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, 'http://' . $_SERVER['HTTP_HOST'] . '/emissornota/api/emitir.php');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
        curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
        curl_setopt($ch, CURLOPT_TIMEOUT, 60);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Seguir redirecionamentos
        
        $resposta = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $curlError = curl_error($ch);
        curl_close($ch);
        
        if ($curlError) {
            $resultados[] = ['id' => $nota_id, 'sucesso' => false, 'erro' => 'Erro CURL: ' . $curlError];
        } else {
            $respostaJson = json_decode($resposta, true);
            if ($respostaJson && isset($respostaJson['sucesso']) && $respostaJson['sucesso']) {
                $resultados[] = [
                    'id' => $nota_id,
                    'sucesso' => true,
                    'numero_nfse' => $respostaJson['numero_nfse'] ?? 'N/A'
                ];
            } else {
                $resultados[] = [
                    'id' => $nota_id,
                    'sucesso' => false,
                    'erro' => $respostaJson['erro']['mensagem'] ?? $respostaJson['erro'] ?? 'Erro desconhecido'
                ];
            }
        }
    }
    
    echo json_encode($resultados);
    exit;
}

// Buscar notas pendentes ou com erro para exibir
$notas = $pdo->query("
    SELECT n.id, n.ref, n.valor_servico, n.status, 
           e.nome as empresa_nome, 
           t.razao_social as tomador_nome
    FROM notas_fiscais n
    JOIN empresas e ON n.empresa_id = e.id
    JOIN tomadores t ON n.tomador_id = t.id
    WHERE n.status IN ('pendente', 'rascunho', 'erro_validacao', 'erro_comunicacao')
    ORDER BY n.id DESC
    LIMIT 100
")->fetchAll(PDO::FETCH_ASSOC);
?>

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Emissão em Lote</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<div class="container mt-4">
    <h2>Emissão em Lote</h2>
    
    <?php if (count($notas) == 0): ?>
    <div class="alert alert-warning">
        ⚠️ Nenhuma nota pendente ou com erro encontrada.
        <br><br>
        <a href="nova_nota.php" class="btn btn-primary">Criar Nova Nota</a>
    </div>
    <?php else: ?>
    
    <div class="alert alert-info">
        Selecione as notas que deseja emitir e clique em "Emitir Selecionadas".
        <br><small>Total de notas disponíveis: <?php echo count($notas); ?></small>
    </div>
    
    <form id="formLote">
        <div class="card">
            <div class="card-header">
                <input type="checkbox" id="selecionarTodos"> Selecionar Todas
                <span class="float-end" id="contador">0 selecionada(s)</span>
            </div>
            <div class="card-body" style="max-height: 500px; overflow-y: auto;">
                <table class="table table-bordered table-striped">
                    <thead>
                        <tr>
                            <th></th>
                            <th>ID</th>
                            <th>Empresa</th>
                            <th>Tomador</th>
                            <th>Valor</th>
                            <th>Status</th>
                            <th>Ref</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php foreach ($notas as $nota): ?>
                        <tr>
                            <td><input type="checkbox" name="notas_ids[]" value="<?php echo $nota['id']; ?>" class="selecionar"></td>
                            <td><?php echo $nota['id']; ?></td>
                            <td><?php echo htmlspecialchars($nota['empresa_nome']); ?></td>
                            <td><?php echo htmlspecialchars($nota['tomador_nome']); ?></td>
                            <td>R$ <?php echo number_format($nota['valor_servico'], 2, ',', '.'); ?></td>
                            <td>
                                <?php
                                $badge = 'secondary';
                                if ($nota['status'] == 'erro_validacao') $badge = 'danger';
                                if ($nota['status'] == 'erro_comunicacao') $badge = 'warning';
                                if ($nota['status'] == 'pendente') $badge = 'info';
                                if ($nota['status'] == 'rascunho') $badge = 'dark';
                                ?>
                                <span class="badge bg-<?php echo $badge; ?>"><?php echo $nota['status']; ?></span>
                            </td>
                            <td><code><?php echo htmlspecialchars($nota['ref']); ?></code></td>
                        </tr>
                        <?php endforeach; ?>
                    </tbody>
                </table>
            </div>
            <div class="card-footer">
                <button type="submit" class="btn btn-primary" id="btnEmitir">
                    Emitir Selecionadas
                </button>
            </div>
        </div>
    </form>
    
    <div id="resultado" class="mt-4" style="display:none;">
        <div class="card">
            <div class="card-header bg-info text-white">
                Resultado da Emissão
                <button type="button" class="btn-close btn-close-white float-end" onclick="$('#resultado').hide();"></button>
            </div>
            <div class="card-body" id="resultadoLista"></div>
        </div>
    </div>
    <?php endif; ?>
</div>

<script>
$(document).ready(function() {
    function atualizarContador() {
        var total = $('.selecionar:checked').length;
        $('#contador').text(total + ' selecionada(s)');
    }
    
    $('#selecionarTodos').change(function() {
        $('.selecionar').prop('checked', $(this).prop('checked'));
        atualizarContador();
    });
    
    $('.selecionar').change(atualizarContador);
    
    $('#formLote').submit(function(e) {
        e.preventDefault();
        
        var notasSelecionadas = [];
        $('.selecionar:checked').each(function() {
            notasSelecionadas.push($(this).val());
        });
        
        if (notasSelecionadas.length === 0) {
            alert('Selecione pelo menos uma nota');
            return;
        }
        
        if (!confirm('Deseja emitir ' + notasSelecionadas.length + ' nota(s)?')) {
            return;
        }
        
        $('#btnEmitir').prop('disabled', true).html('<span class="spinner-border spinner-border-sm"></span> Processando...');
        $('#resultado').hide();
        
        $.ajax({
            url: window.location.href,
            method: 'POST',
            data: {
                notas_ids: notasSelecionadas
            },
            dataType: 'json',
            success: function(response) {
                $('#resultado').show();
                var html = '';
                var sucessos = 0;
                var erros = 0;
                
                for (var i = 0; i < response.length; i++) {
                    var r = response[i];
                    if (r.sucesso) {
                        sucessos++;
                        html += '<div class="alert alert-success alert-sm">✅ <strong>Nota ' + r.id + ':</strong> Emitida! NFSe: ' + r.numero_nfse + '</div>';
                    } else {
                        erros++;
                        html += '<div class="alert alert-danger alert-sm">❌ <strong>Nota ' + r.id + ':</strong> ' + r.erro + '</div>';
                    }
                }
                
                html = '<div class="alert alert-primary">📊 Total: ' + response.length + ' | ✅ Sucessos: ' + sucessos + ' | ❌ Erros: ' + erros + '</div>' + html;
                $('#resultadoLista').html(html);
                
                setTimeout(function() {
                    location.reload();
                }, 5000);
            },
            error: function(xhr) {
                $('#resultado').show();
                $('#resultadoLista').html('<div class="alert alert-danger">❌ Erro na requisição: ' + xhr.status + ' - ' + xhr.statusText + '<br>' + xhr.responseText + '</div>');
                $('#btnEmitir').prop('disabled', false).html('Emitir Selecionadas');
            }
        });
    });
    
    atualizarContador();
});
</script>
</body>
</html>