<?php
/**
 * Helper para Notificações de Vendas em Tempo Real
 * 
 * Funções auxiliares para verificar novas vendas e notificar usuários
 */

// Garantir que a conexão do banco está disponível
if (!isset($pdo)) {
    require_once __DIR__ . '/../config/config_db.php';
}

require_once __DIR__ . '/auth_helper.php';

/**
 * Verifica se há novas vendas aprovadas ou PIX gerados desde a última verificação
 * 
 * @param int $usuario_id ID do usuário
 * @param string $ultima_verificacao Timestamp da última verificação (formato: Y-m-d H:i:s)
 * @return array Array com novas vendas encontradas
 */
function verificar_novas_vendas($usuario_id, $ultima_verificacao = null) {
    global $pdo;
    
    try {
        // Se não houver última verificação, buscar vendas das últimas 24 horas
        if (!$ultima_verificacao) {
            $ultima_verificacao = date('Y-m-d H:i:s', strtotime('-24 hours'));
        }
        
        $novas_vendas = [];
        
        // Buscar vendas como produtor
        $stmt_produtor = $pdo->prepare("
            SELECT 
                t.id,
                t.produto_id,
                t.valor,
                t.status,
                t.tipo_pagamento,
                t.qr_code,
                t.created_at,
                p.nome as produto_nome,
                'produtor' as tipo_venda
            FROM transacoes t
            LEFT JOIN produtos p ON p.id = t.produto_id
            WHERE t.produtor_id = :usuario_id
            AND (
                (t.status = 'Aprovado' AND t.created_at > :ultima_verificacao)
                OR (t.qr_code IS NOT NULL AND t.qr_code != '' AND t.created_at > :ultima_verificacao)
            )
            ORDER BY t.created_at DESC
            LIMIT 10
        ");
        $stmt_produtor->execute([
            ':usuario_id' => $usuario_id,
            ':ultima_verificacao' => $ultima_verificacao
        ]);
        
        while ($venda = $stmt_produtor->fetch(PDO::FETCH_ASSOC)) {
            $novas_vendas[] = $venda;
        }
        
        // Buscar vendas como afiliado
        $stmt_afiliado = $pdo->prepare("
            SELECT 
                t.id,
                t.produto_id,
                t.valor,
                t.status,
                t.tipo_pagamento,
                t.qr_code,
                t.created_at,
                p.nome as produto_nome,
                'afiliado' as tipo_venda,
                vc.valor_afiliado as comissao
            FROM transacoes t
            LEFT JOIN produtos p ON p.id = t.produto_id
            LEFT JOIN vendas_comissoes vc ON vc.transacao_id = t.id
            WHERE t.afiliado_id = :usuario_id
            AND (
                (t.status = 'Aprovado' AND t.created_at > :ultima_verificacao)
                OR (t.qr_code IS NOT NULL AND t.qr_code != '' AND t.created_at > :ultima_verificacao)
            )
            ORDER BY t.created_at DESC
            LIMIT 10
        ");
        $stmt_afiliado->execute([
            ':usuario_id' => $usuario_id,
            ':ultima_verificacao' => $ultima_verificacao
        ]);
        
        while ($venda = $stmt_afiliado->fetch(PDO::FETCH_ASSOC)) {
            $novas_vendas[] = $venda;
        }
        
        // Ordenar por data (mais recente primeiro)
        usort($novas_vendas, function($a, $b) {
            return strtotime($b['created_at']) - strtotime($a['created_at']);
        });
        
        return array_slice($novas_vendas, 0, 10); // Retornar no máximo 10
        
    } catch (PDOException $e) {
        error_log("Erro ao verificar novas vendas: " . $e->getMessage());
        return [];
    }
}

/**
 * Formata mensagem de notificação de venda
 * 
 * @param array $venda Dados da venda
 * @return array Array com título e mensagem formatados
 */
function formatar_notificacao_venda($venda) {
    $tipo_venda = $venda['tipo_venda'] ?? 'produtor';
    $produto_nome = $venda['produto_nome'] ?? 'Produto';
    $valor = number_format(floatval($venda['valor'] ?? 0), 2, ',', '.');
    
    if ($venda['status'] === 'Aprovado') {
        $titulo = '🎉 Venda Aprovada!';
        $mensagem = $tipo_venda === 'afiliado' 
            ? "Você ganhou R$ {$valor} de comissão pela venda de: {$produto_nome}"
            : "Venda aprovada! Você recebeu R$ {$valor} pela venda de: {$produto_nome}";
    } elseif (!empty($venda['qr_code'])) {
        $titulo = '📱 PIX Gerado!';
        $mensagem = "Um PIX foi gerado para o produto: {$produto_nome} (R$ {$valor})";
    } else {
        $titulo = '💰 Nova Venda!';
        $mensagem = "Nova venda registrada para: {$produto_nome} (R$ {$valor})";
    }
    
    return [
        'titulo' => $titulo,
        'mensagem' => $mensagem,
        'tipo' => $venda['status'] === 'Aprovado' ? 'success' : 'info',
        'venda_id' => $venda['id'] ?? null
    ];
}

