<?php
// =============================================
// CRON - ATUALIZAÇÃO DE NOTAS FISCAIS NO ERP
// ATUALIZA TODAS AS CONTAS COM STATUS ABERTO
// =============================================

// 🔥 CONFIGURAÇÃO DE ERROS
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// =============================================
// 🔥 CONFIGURAÇÃO DOS BANCOS DE DADOS
// =============================================

// Banco 1: Sistema de Notas (emissornotas_tirentulho_B)
$configNotas = [
    'host' => '179.127.4.6',
    'user' => 'emissornotas_tirentulho_B',
    'pass' => 'Canal4230@',
    'dbname' => 'emissornotas_tirentulho_B',
];

// Banco 2: ERP (w7master_tiraentulho_B  DEMO)
$configErp = [
    'host' => '179.127.4.6',
    'user' => 'controlm_tiraentulho_B',
    'pass' => 'D89MjV49Iw5',
    'dbname' => 'controlm_tiraentulho_B',
];

// // Banco 3: ERP (w7master_tiraentulho_B OFICIAL)
// $configErp = [
//     'host' => '179.127.4.6',
//     'user' => 'controlm_tiraentulho_B',
//     'pass' => 'D89MjV49Iw5',
//     'dbname' => 'controlm_tiraentulho_B',
// ];




// =============================================
// 🔥 CONEXÃO COM O BANCO DE NOTAS
// =============================================
try {
    $pdoNotas = new PDO(
        "mysql:host={$configNotas['host']};port=3306;dbname={$configNotas['dbname']};charset=utf8",
        $configNotas['user'],
        $configNotas['pass'],
        [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
        ]
    );
    echo "✅ Conectado ao banco de NOTAS (emissornotas_tirentulho_B)<br>";
} catch (PDOException $e) {
    die("❌ Erro ao conectar ao banco de NOTAS: " . $e->getMessage());
}

// =============================================
// 🔥 CONEXÃO COM O BANCO DO ERP
// =============================================
try {
    $pdoErp = new PDO(
        "mysql:host={$configErp['host']};port=3306;dbname={$configErp['dbname']};charset=utf8",
        $configErp['user'],
        $configErp['pass'],
        [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
        ]
    );
    echo "✅ Conectado ao banco do ERP (w7master_tiraentulho_B)<br>";
} catch (PDOException $e) {
    die("❌ Erro ao conectar ao banco do ERP: " . $e->getMessage());
}

// =============================================
// 🔥 FUNÇÃO PARA CALCULAR VALORES
// =============================================
function calcularValores($valorServico, $aliquota, $desconto = 0, $juros = 0) {
    // Cálculo do ISS: valor_servico * (aliquota / 100)
    $valorIss = $valorServico * ($aliquota / 100);
    
    // Cálculo do valor líquido: valor_servico - valor_iss - desconto + juros
    $valorLiquido = $valorServico - $valorIss - $desconto + $juros;
    
    return [
        'valor_iss' => round($valorIss, 2),
        'valor_liquido' => round($valorLiquido, 2)
    ];
}

echo "<hr>";
echo "<h2>📊 Buscando contas ABERTAS no ERP...</h2>";

// =============================================
// 🔥 BUSCAR CONTAS COM STATUS ABERTO
// =============================================
$stmt = $pdoErp->prepare("
    SELECT 
        id,
        nro_documento,
        valor,
        desconto,
        juros,
        notafiscal,
        iss,
        valor_iss,
        total_pagamento,
        status
    FROM contas_receber 
    WHERE status = 'ABERTO'
    ORDER BY id DESC
    LIMIT 100
");

$stmt->execute();
$contasAbertas = $stmt->fetchAll();

echo "<p>Encontradas " . count($contasAbertas) . " contas com status ABERTO</p>";

$totalAtualizadas = 0;
$totalErros = 0;
$totalSemNota = 0;
$totalIgnoradas = 0;

// =============================================
// 🔥 PROCESSAR CADA CONTA ABERTA
// =============================================
echo "<table border='1' cellpadding='5' style='border-collapse:collapse; width:100%; font-size:11px;'>";
echo "<tr style='background:#f0f0f0;'>";
echo "<th>#</th><th>ID</th><th>Referência</th><th>Valor</th><th>Desconto</th><th>Juros</th><th>Status</th><th>NFSe</th><th>Alíquota</th><th>Valor ISS</th><th>Total Pago</th><th>Resultado</th>";
echo "</tr>";

$contador = 0;
foreach ($contasAbertas as $conta) {
    $contador++;
    $id = $conta['id'];
    $ref = $conta['nro_documento'];
    $valor = floatval($conta['valor'] ?? 0);
    $desconto = floatval($conta['desconto'] ?? 0);
    $juros = floatval($conta['juros'] ?? 0);
    $statusAtual = $conta['status'];
    
    // Verificar se já tem nota fiscal
    if ($conta['notafiscal'] && $conta['iss'] > 0) {
        echo "<tr style='background:#e3f2fd;'>";
        echo "<td>{$contador}</td>";
        echo "<td>{$id}</td>";
        echo "<td><code>{$ref}</code></td>";
        echo "<td>R$ " . number_format($valor, 2, ',', '.') . "</td>";
        echo "<td>R$ " . number_format($desconto, 2, ',', '.') . "</td>";
        echo "<td>R$ " . number_format($juros, 2, ',', '.') . "</td>";
        echo "<td>{$statusAtual}</td>";
        echo "<td>{$conta['notafiscal']}</td>";
        echo "<td>{$conta['iss']}%</td>";
        echo "<td>R$ " . number_format($conta['valor_iss'] ?? 0, 2, ',', '.') . "</td>";
        echo "<td>R$ " . number_format($conta['total_pagamento'] ?? 0, 2, ',', '.') . "</td>";
        echo "<td style='color:blue;'>ℹ️ Já atualizada</td>";
        echo "</tr>";
        $totalIgnoradas++;
        continue;
    }
    
    // 🔥 BUSCAR NOTA FISCAL CORRESPONDENTE
    $stmtNota = $pdoNotas->prepare("
        SELECT 
            id,
            ref,
            numero_nfse,
            valor_servico,
            aliquota,
            valor_iss,
            valor_liquido,
            status
        FROM notas_fiscais 
        WHERE ref = ?
        AND status IN ('autorizado', 'aprovado')
        AND numero_nfse IS NOT NULL
        AND numero_nfse != ''
    ");
    $stmtNota->execute([$ref]);
    $nota = $stmtNota->fetch();
    
    if (!$nota) {
        echo "<tr style='background:#fff3e0;'>";
        echo "<td>{$contador}</td>";
        echo "<td>{$id}</td>";
        echo "<td><code>{$ref}</code></td>";
        echo "<td>R$ " . number_format($valor, 2, ',', '.') . "</td>";
        echo "<td>R$ " . number_format($desconto, 2, ',', '.') . "</td>";
        echo "<td>R$ " . number_format($juros, 2, ',', '.') . "</td>";
        echo "<td>{$statusAtual}</td>";
        echo "<td style='color:orange;'>⚠️ Nota não encontrada</td>";
        echo "<td>-</td>";
        echo "<td>-</td>";
        echo "<td>-</td>";
        echo "<td style='color:orange;'>Sem nota</td>";
        echo "</tr>";
        $totalSemNota++;
        continue;
    }
    
    // 🔥 DADOS DA NOTA ENCONTRADA
    $numeroNfse = $nota['numero_nfse'];
    $valorServico = floatval($nota['valor_servico'] ?? 0);
    $aliquota = floatval($nota['aliquota'] ?? 0);
    
    // 🔥 CALCULAR VALORES CONSIDERANDO DESCONTO E JUROS
    $valores = calcularValores($valorServico, $aliquota, $desconto, $juros);
    $valorIss = $valores['valor_iss'];
    $valorLiquido = $valores['valor_liquido'];
    
    // =============================================
    // 🔥 ATUALIZAR A CONTA NO ERP
    // =============================================
    try {
        $stmt = $pdoErp->prepare("
            UPDATE contas_receber SET 
                notafiscal = :notafiscal,
                iss = :iss,
                valor_iss = :valor_iss,
                total_pagamento = :total_pagamento
            WHERE id = :id
        ");
        
        $stmt->execute([
            ':notafiscal' => $numeroNfse,
            ':iss' => $aliquota,
            ':valor_iss' => $valorIss,
            ':total_pagamento' => $valorLiquido,
            ':id' => $id
        ]);
        
        echo "<tr style='background:#e8f5e9;'>";
        echo "<td>{$contador}</td>";
        echo "<td>{$id}</td>";
        echo "<td><code>{$ref}</code></td>";
        echo "<td>R$ " . number_format($valor, 2, ',', '.') . "</td>";
        echo "<td>R$ " . number_format($desconto, 2, ',', '.') . "</td>";
        echo "<td>R$ " . number_format($juros, 2, ',', '.') . "</td>";
        echo "<td>{$statusAtual}</td>";
        echo "<td><strong>{$numeroNfse}</strong></td>";
        echo "<td><strong>{$aliquota}%</strong></td>";
        echo "<td>R$ " . number_format($valorIss, 2, ',', '.') . "</td>";
        echo "<td><strong>R$ " . number_format($valorLiquido, 2, ',', '.') . "</strong></td>";
        echo "<td style='color:green;'>✅ Atualizado</td>";
        echo "</tr>";
        $totalAtualizadas++;
        
    } catch (PDOException $e) {
        echo "<tr style='background:#ffebee;'>";
        echo "<td>{$contador}</td>";
        echo "<td>{$id}</td>";
        echo "<td><code>{$ref}</code></td>";
        echo "<td>R$ " . number_format($valor, 2, ',', '.') . "</td>";
        echo "<td>R$ " . number_format($desconto, 2, ',', '.') . "</td>";
        echo "<td>R$ " . number_format($juros, 2, ',', '.') . "</td>";
        echo "<td>{$statusAtual}</td>";
        echo "<td>{$numeroNfse}</td>";
        echo "<td>{$aliquota}%</td>";
        echo "<td>R$ " . number_format($valorIss, 2, ',', '.') . "</td>";
        echo "<td>R$ " . number_format($valorLiquido, 2, ',', '.') . "</td>";
        echo "<td style='color:red;'>❌ Erro</td>";
        echo "</tr>";
        $totalErros++;
    }
}

echo "</table>";

// =============================================
// 🔥 RELATÓRIO FINAL
// =============================================
echo "<hr>";
echo "<h2>📊 RELATÓRIO FINAL</h2>";
echo "<table border='1' cellpadding='10' style='border-collapse:collapse;'>";
echo "<tr><td><strong>Total de contas ABERTAS processadas</strong></td><td>" . count($contasAbertas) . "</td></tr>";
echo "<tr style='background:#e8f5e9;'><td><strong>✅ Total atualizadas</strong></td><td><strong>$totalAtualizadas</strong></td></tr>";
echo "<tr style='background:#e3f2fd;'><td><strong>ℹ️ Total ignoradas (já atualizadas)</strong></td><td>$totalIgnoradas</td></tr>";
echo "<tr style='background:#ffebee;'><td><strong>❌ Total com erro</strong></td><td>$totalErros</td></tr>";
echo "<tr style='background:#fff3e0;'><td><strong>⚠️ Total sem nota correspondente</strong></td><td>$totalSemNota</td></tr>";
echo "</table>";

echo "<p style='color:green;font-weight:bold;font-size:16px;'>✅ Processamento concluído!</p>";

// =============================================
// 🔥 MOSTRAR RESUMO DAS CONTAS ATUALIZADAS
// =============================================
echo "<hr>";
echo "<h2>📋 Últimas contas atualizadas</h2>";

$stmt = $pdoErp->query("
    SELECT 
        id,
        nro_documento,
        notafiscal,
        iss,
        valor_iss,
        total_pagamento,
        desconto,
        juros,
        status
    FROM contas_receber 
    WHERE notafiscal IS NOT NULL 
    AND notafiscal != ''
    AND iss > 0
    ORDER BY id DESC 
    LIMIT 20
");
$atualizadas = $stmt->fetchAll();

if (count($atualizadas) > 0) {
    echo "<table border='1' cellpadding='5' style='border-collapse:collapse;'>";
    echo "<tr style='background:#f0f0f0;'>";
    echo "<th>ID</th><th>Referência</th><th>NFSe</th><th>ISS %</th><th>Valor ISS</th><th>Desconto</th><th>Juros</th><th>Total</th><th>Status</th>";
    echo "</tr>";
    foreach ($atualizadas as $row) {
        echo "<tr>";
        echo "<td>{$row['id']}</td>";
        echo "<td><code>{$row['nro_documento']}</code></td>";
        echo "<td><strong>{$row['notafiscal']}</strong></td>";
        echo "<td>{$row['iss']}%</td>";
        echo "<td>R$ " . number_format($row['valor_iss'] ?? 0, 2, ',', '.') . "</td>";
        echo "<td>R$ " . number_format($row['desconto'] ?? 0, 2, ',', '.') . "</td>";
        echo "<td>R$ " . number_format($row['juros'] ?? 0, 2, ',', '.') . "</td>";
        echo "<td><strong>R$ " . number_format($row['total_pagamento'] ?? 0, 2, ',', '.') . "</strong></td>";
        echo "<td>{$row['status']}</td>";
        echo "</tr>";
    }
    echo "</table>";
} else {
    echo "<p>Nenhuma conta atualizada encontrada</p>";
}

// =============================================
// 🔥 MOSTRAR EXEMPLO DE CÁLCULO
// =============================================
echo "<hr>";
echo "<h2>📋 Exemplo de Cálculo</h2>";
echo "<div style='background:#f8f9fa; padding:15px; border-radius:5px;'>";
echo "<p><strong>Fórmula:</strong></p>";
echo "<p><code>total_pagamento = valor_servico - valor_iss - desconto + juros</code></p>";
echo "<p><strong>Exemplo:</strong></p>";
echo "<ul>";
echo "<li>Valor do Serviço: R$ 1.920,00</li>";
echo "<li>Alíquota do ISS: 3,43%</li>";
echo "<li>Valor do ISS: R$ 1.920,00 × 3,43% = R$ 65,86</li>";
echo "<li>Desconto: R$ 0,00</li>";
echo "<li>Juros: R$ 0,00</li>";
echo "<li><strong>Total a Pagar: R$ 1.920,00 - R$ 65,86 - R$ 0,00 + R$ 0,00 = R$ 1.854,14</strong></li>";
echo "</ul>";
echo "<p><strong>Com desconto e juros:</strong></p>";
echo "<ul>";
echo "<li>Valor do Serviço: R$ 1.920,00</li>";
echo "<li>Alíquota do ISS: 3,43%</li>";
echo "<li>Valor do ISS: R$ 65,86</li>";
echo "<li>Desconto: R$ 100,00</li>";
echo "<li>Juros: R$ 50,00</li>";
echo "<li><strong>Total a Pagar: R$ 1.920,00 - R$ 65,86 - R$ 100,00 + R$ 50,00 = R$ 1.804,14</strong></li>";
echo "</ul>";
echo "</div>";

// =============================================
// 🔥 ESTATÍSTICAS DO ERP
// =============================================
echo "<hr>";
echo "<h2>📊 Estatísticas do ERP</h2>";

$stmt = $pdoErp->query("
    SELECT 
        COUNT(*) as total,
        SUM(CASE WHEN status = 'ABERTO' THEN 1 ELSE 0 END) as abertas,
        SUM(CASE WHEN status = 'PAGO' THEN 1 ELSE 0 END) as pagas,
        SUM(CASE WHEN notafiscal IS NOT NULL AND notafiscal != '' THEN 1 ELSE 0 END) as com_nota,
        SUM(CASE WHEN iss IS NOT NULL AND iss > 0 THEN 1 ELSE 0 END) as com_iss
    FROM contas_receber
");
$stats = $stmt->fetch();

echo "<table border='1' cellpadding='5' style='border-collapse:collapse;'>";
echo "<tr><td><strong>Total de contas</strong></td><td>{$stats['total']}</td></tr>";
echo "<tr><td>Status ABERTO</td><td>{$stats['abertas']}</td></tr>";
echo "<tr><td>Status PAGO</td><td>{$stats['pagas']}</td></tr>";
echo "<tr><td>Com NFSe</td><td>{$stats['com_nota']}</td></tr>";
echo "<tr><td>Com ISS</td><td>{$stats['com_iss']}</td></tr>";
echo "</table>";
?>