Loto / src /components /RealComparisonDemo.tsx
Raí Santos
oi
4c1e4ec
import React from 'react';
import { CheckCircle, XCircle, Target, Zap, Trophy, Eye } from 'lucide-react';
import { LotomaniaGame, LotomaniaResult } from '../types';
import { LotomaniaAlgorithm } from '../utils/lotomaniaAlgorithm';
interface RealComparisonDemoProps {
game: LotomaniaGame;
result: LotomaniaResult | null;
algorithm: LotomaniaAlgorithm;
}
const RealComparisonDemo: React.FC<RealComparisonDemoProps> = ({
game,
result,
algorithm
}) => {
if (!result) {
return (
<div className="bg-gray-100 p-6 rounded-xl text-center">
<Eye className="w-8 h-8 text-gray-400 mx-auto mb-2" />
<p className="text-gray-600">Carregando resultado da Lotomania para comparação...</p>
</div>
);
}
// Pegar números exatos marcados no jogo
const gameNumbers = algorithm.getNumbersFromGame(game);
const resultNumbers = result.numeros;
// Log para transparência total (dados reais sendo comparados)
console.log('🔍 COMPARAÇÃO REAL - Dados sendo comparados:');
console.log(`Jogo #${game.id} (${game.type}):`, gameNumbers.sort((a, b) => a - b));
console.log(`Concurso #${result.concurso}:`, resultNumbers.sort((a, b) => a - b));
// Fazer comparação real
const matches = gameNumbers.filter(num => resultNumbers.includes(num));
const nonMatches = gameNumbers.filter(num => !resultNumbers.includes(num));
// const drawnButNotPlayed = resultNumbers.filter(num => !gameNumbers.includes(num));
console.log(`Acertos encontrados:`, matches.sort((a, b) => a - b));
console.log(`Total de acertos: ${matches.length}`);
// Calcular pontuação oficial da Lotomania
const matchCount = matches.length;
let points = 0;
let prizeType = '';
let prizeEmoji = '';
if (matchCount === 20 || matchCount === 0) {
points = 20;
prizeType = 'PRÊMIO MÁXIMO';
prizeEmoji = '🎉🏆';
} else if (matchCount === 19) {
points = 19;
prizeType = 'PRÊMIO ALTO';
prizeEmoji = '🏆';
} else if (matchCount === 18) {
points = 18;
prizeType = 'PRÊMIO MÉDIO';
prizeEmoji = '🥉';
} else if (matchCount === 17) {
points = 17;
prizeType = 'PRÊMIO BAIXO';
prizeEmoji = '🏅';
} else {
points = matchCount;
prizeType = 'SEM PRÊMIO';
prizeEmoji = '❌';
}
return (
<div className="bg-white border-2 border-blue-200 rounded-xl p-6 shadow-lg">
<div className="text-center mb-6">
<div className="flex items-center justify-center gap-3 mb-2">
<Target className="w-6 h-6 text-blue-600" />
<h3 className="text-xl font-bold text-gray-800">
🔍 COMPARAÇÃO REAL E VERDADEIRA
</h3>
<Zap className="w-6 h-6 text-yellow-500" />
</div>
<p className="text-gray-600">
Jogo #{game.id} vs Concurso #{result.concurso} ({result.data})
</p>
</div>
{/* Informações do Jogo */}
<div className="grid md:grid-cols-3 gap-6 mb-6">
{/* Números Jogados */}
<div className="bg-blue-50 p-4 rounded-lg border border-blue-200">
<h4 className="font-bold text-blue-800 mb-3 flex items-center">
<span className="w-2 h-2 bg-blue-600 rounded-full mr-2"></span>
NÚMEROS JOGADOS ({gameNumbers.length})
</h4>
<div className="text-sm text-blue-700 mb-2">
{game.type === 'vertical'
? `Colunas: ${game.markedColumns.join(', ')}`
: `Linhas: ${game.markedRows?.join(', ')}`
}
</div>
<div className="flex flex-wrap gap-1 max-h-32 overflow-y-auto">
{gameNumbers.sort((a, b) => a - b).map(num => (
<span
key={num}
className={`px-2 py-1 text-xs rounded font-bold ${
matches.includes(num)
? 'bg-green-500 text-white ring-2 ring-green-300'
: 'bg-blue-500 text-white'
}`}
>
{num}
</span>
))}
</div>
</div>
{/* Números Sorteados */}
<div className="bg-purple-50 p-4 rounded-lg border border-purple-200">
<h4 className="font-bold text-purple-800 mb-3 flex items-center">
<span className="w-2 h-2 bg-purple-600 rounded-full mr-2"></span>
NÚMEROS SORTEADOS (20)
</h4>
<div className="text-sm text-purple-700 mb-2">
Concurso Oficial #{result.concurso}
</div>
<div className="flex flex-wrap gap-1 max-h-32 overflow-y-auto">
{resultNumbers.sort((a, b) => a - b).map(num => (
<span
key={num}
className={`px-2 py-1 text-xs rounded font-bold ${
matches.includes(num)
? 'bg-green-500 text-white ring-2 ring-green-300'
: 'bg-purple-500 text-white'
}`}
>
{num}
</span>
))}
</div>
</div>
{/* Resultado da Comparação */}
<div className={`p-4 rounded-lg border-2 ${
points >= 17
? 'bg-green-50 border-green-300'
: 'bg-gray-50 border-gray-300'
}`}>
<h4 className={`font-bold mb-3 flex items-center ${
points >= 17 ? 'text-green-800' : 'text-gray-700'
}`}>
{points >= 17 ? <Trophy className="w-4 h-4 mr-2" /> : <XCircle className="w-4 h-4 mr-2" />}
RESULTADO
</h4>
<div className="text-center">
<div className="text-3xl font-bold mb-1">
{prizeEmoji}
</div>
<div className={`text-2xl font-bold ${
points >= 17 ? 'text-green-600' : 'text-gray-600'
}`}>
{matchCount} ACERTOS
</div>
<div className={`text-lg font-bold ${
points >= 17 ? 'text-green-700' : 'text-gray-700'
}`}>
{points} PONTOS
</div>
<div className={`text-sm font-medium mt-2 px-2 py-1 rounded ${
points >= 17 ? 'bg-green-200 text-green-800' : 'bg-gray-200 text-gray-700'
}`}>
{prizeType}
</div>
</div>
</div>
</div>
{/* Análise Detalhada */}
<div className="grid md:grid-cols-2 gap-4">
{/* Números que Acertaram */}
<div className="bg-green-50 p-4 rounded-lg border border-green-200">
<h4 className="font-bold text-green-800 mb-3 flex items-center">
<CheckCircle className="w-5 h-5 mr-2" />
ACERTOS ({matches.length})
</h4>
{matches.length > 0 ? (
<div className="flex flex-wrap gap-1">
{matches.sort((a, b) => a - b).map(num => (
<span
key={num}
className="px-3 py-1 bg-green-600 text-white rounded-lg font-bold text-sm"
>
{num}
</span>
))}
</div>
) : (
<p className="text-green-700 italic">Nenhum número acertado neste jogo.</p>
)}
</div>
{/* Números que Erraram */}
<div className="bg-red-50 p-4 rounded-lg border border-red-200">
<h4 className="font-bold text-red-800 mb-3 flex items-center">
<XCircle className="w-5 h-5 mr-2" />
ERROS ({nonMatches.length})
</h4>
<div className="flex flex-wrap gap-1 max-h-24 overflow-y-auto">
{nonMatches.sort((a, b) => a - b).map(num => (
<span
key={num}
className="px-2 py-1 bg-red-500 text-white rounded font-bold text-xs"
>
{num}
</span>
))}
</div>
</div>
</div>
{/* Processo de Comparação Passo a Passo */}
<div className="mt-6 p-6 bg-gray-50 rounded-xl border">
<h4 className="font-bold text-gray-800 mb-4 text-center">
🔬 COMO A COMPARAÇÃO É FEITA (Passo a Passo)
</h4>
<div className="grid md:grid-cols-4 gap-4 text-sm">
<div className="bg-white p-3 rounded-lg border text-center">
<div className="text-2xl mb-2">1️⃣</div>
<div className="font-semibold text-gray-800 mb-1">Gerar Números</div>
<div className="text-gray-600 text-xs">
Estratégia calcula quais dos 100 números estão marcados
</div>
</div>
<div className="bg-white p-3 rounded-lg border text-center">
<div className="text-2xl mb-2">2️⃣</div>
<div className="font-semibold text-gray-800 mb-1">Buscar Resultado</div>
<div className="text-gray-600 text-xs">
API oficial da Caixa fornece os 20 números sorteados
</div>
</div>
<div className="bg-white p-3 rounded-lg border text-center">
<div className="text-2xl mb-2">3️⃣</div>
<div className="font-semibold text-gray-800 mb-1">Comparar</div>
<div className="text-gray-600 text-xs">
Verificar quantos números do jogo estão no resultado
</div>
</div>
<div className="bg-white p-3 rounded-lg border text-center">
<div className="text-2xl mb-2">4️⃣</div>
<div className="font-semibold text-gray-800 mb-1">Pontuar</div>
<div className="text-gray-600 text-xs">
Aplicar regras oficiais da Lotomania (17+, 18+, 19+, 20 ou 0 = prêmio)
</div>
</div>
</div>
</div>
{/* Fórmula Matemática */}
<div className="mt-4 p-4 bg-blue-50 rounded-lg border border-blue-200">
<h5 className="font-bold text-blue-800 mb-2 text-center">📐 FÓRMULA MATEMÁTICA</h5>
<div className="bg-white p-3 rounded border text-center font-mono text-sm">
<div className="text-gray-700">
ACERTOS = números_do_jogo <span className="text-blue-600 font-bold"></span> números_sorteados
</div>
<div className="text-xs text-gray-500 mt-2">
(interseção de conjuntos - matemática pura)
</div>
</div>
<div className="text-center mt-2 text-sm text-blue-700">
<strong>Exemplo atual:</strong> {gameNumbers.length} números jogados ∩ 20 sorteados = {matches.length} acertos
</div>
</div>
{/* Garantia de Veracidade */}
<div className="mt-4 p-4 bg-gradient-to-r from-blue-100 to-green-100 rounded-lg border">
<div className="text-center">
<div className="flex items-center justify-center gap-2 mb-2">
<CheckCircle className="w-5 h-5 text-green-600" />
<span className="font-bold text-green-800">100% DADOS REAIS</span>
<CheckCircle className="w-5 h-5 text-green-600" />
</div>
<div className="text-sm text-gray-700 space-y-1">
<p>✅ Números do jogo calculados pela estratégia real</p>
<p>✅ Resultado oficial da Caixa Econômica Federal</p>
<p>✅ Comparação matemática exata (sem invenções)</p>
<p>✅ Pontuação conforme regras oficiais da Lotomania</p>
<p className="text-blue-700 font-semibold">🔍 Verifique o console do navegador para logs de transparência!</p>
</div>
</div>
</div>
</div>
);
};
export default RealComparisonDemo;