<?php
/**
 * Helper para Header - Perfil e Saldo
 * 
 * Funções auxiliares para exibir perfil e saldo no header
 */

// 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';
require_once __DIR__ . '/financeiro_helper.php';

/**
 * Obtém o saldo total do usuário (soma de todas as vendas aprovadas)
 * 
 * @param int $usuario_id ID do usuário
 * @return float Saldo total formatado
 */
function obter_saldo_total_usuario($usuario_id) {
    global $pdo;
    
    try {
        // Buscar saldo disponível da tabela saldos_usuarios
        $saldo = obter_saldo_usuario($usuario_id);
        $saldo_total = floatval($saldo['saldo_disponivel'] ?? 0.00);
        
        // Se não houver saldo na tabela, calcular a partir das transações aprovadas
        if ($saldo_total == 0.00) {
            // Como produtor
            $stmt_produtor = $pdo->prepare("
                SELECT COALESCE(SUM(valor), 0) as total 
                FROM transacoes 
                WHERE produtor_id = ? 
                AND status = 'Aprovado'
            ");
            $stmt_produtor->execute([$usuario_id]);
            $total_produtor = floatval($stmt_produtor->fetch(PDO::FETCH_ASSOC)['total'] ?? 0.00);
            
            // Como afiliado (comissões)
            $stmt_afiliado = $pdo->prepare("
                SELECT COALESCE(SUM(vc.valor_afiliado), 0) as total 
                FROM vendas_comissoes vc
                INNER JOIN transacoes t ON t.id = vc.transacao_id
                WHERE vc.afiliado_id = ? 
                AND t.status = 'Aprovado'
            ");
            $stmt_afiliado->execute([$usuario_id]);
            $total_afiliado = floatval($stmt_afiliado->fetch(PDO::FETCH_ASSOC)['total'] ?? 0.00);
            
            $saldo_total = $total_produtor + $total_afiliado;
        }
        
        return $saldo_total;
    } catch (PDOException $e) {
        error_log("Erro ao obter saldo total: " . $e->getMessage());
        return 0.00;
    }
}

/**
 * Formata o saldo em moeda brasileira
 * 
 * @param float $valor Valor a formatar
 * @return string Valor formatado (R$ X.XXX,XX)
 */
function formatar_saldo($valor) {
    return 'R$ ' . number_format(floatval($valor), 2, ',', '.');
}

/**
 * Obtém dados do usuário para exibir no header
 * 
 * @return array Dados do usuário (id, nome, email, foto_perfil, saldo_total)
 */
function obter_dados_header_usuario() {
    $usuario = usuario_logado();
    
    if (!$usuario) {
        return null;
    }
    
    global $pdo;
    
    try {
        // Buscar foto de perfil
        $stmt = $pdo->prepare("SELECT foto_perfil FROM usuarios WHERE id = ? LIMIT 1");
        $stmt->execute([$usuario['id']]);
        $dados = $stmt->fetch(PDO::FETCH_ASSOC);
        
        $foto_perfil = $dados['foto_perfil'] ?? null;
        
        // Buscar saldo total
        $saldo_total = obter_saldo_total_usuario($usuario['id']);
        
        return [
            'id' => $usuario['id'],
            'nome' => $usuario['nome'],
            'email' => $usuario['email'],
            'foto_perfil' => $foto_perfil,
            'saldo_total' => $saldo_total,
            'saldo_formatado' => formatar_saldo($saldo_total)
        ];
    } catch (PDOException $e) {
        error_log("Erro ao obter dados do header: " . $e->getMessage());
        return [
            'id' => $usuario['id'],
            'nome' => $usuario['nome'],
            'email' => $usuario['email'],
            'foto_perfil' => null,
            'saldo_total' => 0.00,
            'saldo_formatado' => formatar_saldo(0.00)
        ];
    }
}

