import React, { useMemo } from 'react';
import { TrendingUp, Calculator, Target, AlertCircle } from 'lucide-react';
import { LotomaniaGame, LotomaniaResult } from '../types';

interface GameProfitabilityAnalysisProps {
  verticalGame: LotomaniaGame;
  horizontalGame: LotomaniaGame;
  latestResult: LotomaniaResult;
  getNumbersFromGame: (game: LotomaniaGame) => number[];
  className?: string;
}

const GameProfitabilityAnalysis: React.FC<GameProfitabilityAnalysisProps> = ({
  verticalGame,
  horizontalGame,
  latestResult,
  getNumbersFromGame,
  className = ''
}) => {
  // Calcular análise de rentabilidade
  const profitabilityAnalysis = useMemo(() => {
    const verticalNumbers = getNumbersFromGame(verticalGame);
    const horizontalNumbers = getNumbersFromGame(horizontalGame);
    
    // Calcular acertos para cada jogo
    const verticalMatches = verticalNumbers.filter(num => latestResult.numeros.includes(num)).length;
    const horizontalMatches = horizontalNumbers.filter(num => latestResult.numeros.includes(num)).length;
    
    // Buscar premiação correspondente aos acertos
    const getWinnings = (matches: number) => {
      const premio = latestResult.premiacoes?.find(p => p.acertos === matches);
      return premio?.valorPremio || 0;
    };
    
    const verticalWinnings = getWinnings(verticalMatches);
    const horizontalWinnings = getWinnings(horizontalMatches);
    
    // Custo de cada jogo (R$ 3,00 por jogo na Lotomania)
    const gameCost = 3.00;
    const totalCost = gameCost * 2; // Dois jogos
    
    // Lucro líquido
    const totalWinnings = verticalWinnings + horizontalWinnings;
    const netProfit = totalWinnings - totalCost;
    const profitMargin = totalCost > 0 ? (netProfit / totalCost) * 100 : 0;
    
    // Análise de probabilidades
    const calculateOdds = (matches: number) => {
      // Odds aproximadas para Lotomania baseadas em estatísticas oficiais
      const oddsTable: Record<number, number> = {
        20: 11372635, // 1 em ~11 milhões
        19: 352384,   // 1 em ~352 mil
        18: 24192,    // 1 em ~24 mil
        17: 2776,     // 1 em ~2.7 mil
        16: 472,      // 1 em ~472
        15: 112,      // 1 em ~112
        0: 11372635   // 0 acertos tem a mesma probabilidade que 20
      };
      return oddsTable[matches] || 0;
    };
    
    return {
      vertical: {
        matches: verticalMatches,
        winnings: verticalWinnings,
        cost: gameCost,
        profit: verticalWinnings - gameCost,
        odds: calculateOdds(verticalMatches)
      },
      horizontal: {
        matches: horizontalMatches,
        winnings: horizontalWinnings,
        cost: gameCost,
        profit: horizontalWinnings - gameCost,
        odds: calculateOdds(horizontalMatches)
      },
      combined: {
        totalWinnings,
        totalCost,
        netProfit,
        profitMargin,
        isProfit: netProfit > 0
      }
    };
  }, [verticalGame, horizontalGame, latestResult, getNumbersFromGame]);

  // Formatação de valores
  const formatCurrency = (value: number) => 
    new Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL' }).format(value);
    
  const formatPercentage = (value: number) => 
    `${value >= 0 ? '+' : ''}${value.toFixed(1)}%`;
    
  const formatOdds = (odds: number) => 
    odds > 0 ? `1 em ${new Intl.NumberFormat('pt-BR').format(odds)}` : 'N/A';

  // Análise de estratégia
  const getStrategyAnalysis = () => {
    const { combined } = profitabilityAnalysis;
    
    if (combined.netProfit > 1000) {
      return {
        level: 'excellent',
        title: '🏆 Excelente Resultado!',
        description: 'Estratégia muito lucrativa neste concurso.',
        color: 'from-green-500 to-emerald-600'
      };
    } else if (combined.netProfit > 100) {
      return {
        level: 'good',
        title: '✅ Bom Resultado',
        description: 'Estratégia rendeu lucro positivo.',
        color: 'from-green-400 to-green-500'
      };
    } else if (combined.netProfit > 0) {
      return {
        level: 'break-even',
        title: '💰 Lucro Pequeno',
        description: 'Estratégia cobriu os custos com pequeno lucro.',
        color: 'from-yellow-400 to-yellow-500'
      };
    } else if (combined.netProfit > -20) {
      return {
        level: 'small-loss',
        title: '📉 Pequena Perda',
        description: 'Perda controlada dentro do esperado.',
        color: 'from-orange-400 to-orange-500'
      };
    } else {
      return {
        level: 'loss',
        title: '❌ Prejuízo',
        description: 'Estratégia não foi lucrativa neste concurso.',
        color: 'from-red-400 to-red-500'
      };
    }
  };

  const strategy = getStrategyAnalysis();

  return (
    <div className={`bg-white rounded-2xl shadow-xl border border-gray-100 ${className}`}>
      {/* Header */}
      <div className={`bg-gradient-to-r ${strategy.color} text-white p-6 rounded-t-2xl`}>
        <div className="flex items-center justify-between">
          <div className="flex items-center space-x-3">
            <Calculator className="w-8 h-8" />
            <div>
              <h2 className="text-2xl font-bold">Análise de Rentabilidade</h2>
              <p className="text-white/90">Concurso {latestResult.concurso}</p>
            </div>
          </div>
          <div className="text-right">
            <p className="text-white/90 text-sm">Resultado da Estratégia</p>
            <p className="text-3xl font-bold">{strategy.title.split(' ')[0]}</p>
          </div>
        </div>
      </div>

      <div className="p-6">
        {/* Resumo Geral */}
        <div className="bg-gray-50 rounded-xl p-6 mb-6">
          <h3 className="text-lg font-semibold text-gray-800 mb-4">{strategy.title}</h3>
          <p className="text-gray-600 mb-4">{strategy.description}</p>
          
          <div className="grid grid-cols-1 md:grid-cols-4 gap-4">
            <div className="text-center">
              <p className="text-sm text-gray-600">Investimento Total</p>
              <p className="text-2xl font-bold text-gray-800">
                {formatCurrency(profitabilityAnalysis.combined.totalCost)}
              </p>
            </div>
            <div className="text-center">
              <p className="text-sm text-gray-600">Prêmios Ganhos</p>
              <p className="text-2xl font-bold text-blue-600">
                {formatCurrency(profitabilityAnalysis.combined.totalWinnings)}
              </p>
            </div>
            <div className="text-center">
              <p className="text-sm text-gray-600">Lucro Líquido</p>
              <p className={`text-2xl font-bold ${
                profitabilityAnalysis.combined.netProfit >= 0 ? 'text-green-600' : 'text-red-600'
              }`}>
                {formatCurrency(profitabilityAnalysis.combined.netProfit)}
              </p>
            </div>
            <div className="text-center">
              <p className="text-sm text-gray-600">Margem de Lucro</p>
              <p className={`text-2xl font-bold ${
                profitabilityAnalysis.combined.profitMargin >= 0 ? 'text-green-600' : 'text-red-600'
              }`}>
                {formatPercentage(profitabilityAnalysis.combined.profitMargin)}
              </p>
            </div>
          </div>
        </div>

        {/* Análise por Jogo */}
        <div className="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-6">
          {/* Jogo Vertical */}
          <div className="bg-blue-50 border border-blue-200 rounded-xl p-5">
            <div className="flex items-center space-x-3 mb-4">
              <div className="bg-blue-500 text-white p-2 rounded-lg">
                <Target className="w-5 h-5" />
              </div>
              <div>
                <h4 className="font-semibold text-blue-800">Jogo Vertical #{verticalGame.id}</h4>
                <p className="text-sm text-blue-600">Estratégia por Colunas</p>
              </div>
            </div>
            
            <div className="space-y-3">
              <div className="flex justify-between">
                <span className="text-blue-700">Acertos:</span>
                <span className="font-bold text-blue-800">
                  {profitabilityAnalysis.vertical.matches} números
                </span>
              </div>
              <div className="flex justify-between">
                <span className="text-blue-700">Prêmio:</span>
                <span className="font-bold text-green-600">
                  {formatCurrency(profitabilityAnalysis.vertical.winnings)}
                </span>
              </div>
              <div className="flex justify-between">
                <span className="text-blue-700">Custo:</span>
                <span className="font-bold text-gray-600">
                  {formatCurrency(profitabilityAnalysis.vertical.cost)}
                </span>
              </div>
              <div className="flex justify-between border-t border-blue-200 pt-2">
                <span className="text-blue-700 font-medium">Lucro:</span>
                <span className={`font-bold ${
                  profitabilityAnalysis.vertical.profit >= 0 ? 'text-green-600' : 'text-red-600'
                }`}>
                  {formatCurrency(profitabilityAnalysis.vertical.profit)}
                </span>
              </div>
              <div className="text-xs text-blue-600">
                Probabilidade: {formatOdds(profitabilityAnalysis.vertical.odds)}
              </div>
            </div>
          </div>

          {/* Jogo Horizontal */}
          <div className="bg-green-50 border border-green-200 rounded-xl p-5">
            <div className="flex items-center space-x-3 mb-4">
              <div className="bg-green-500 text-white p-2 rounded-lg">
                <Target className="w-5 h-5" />
              </div>
              <div>
                <h4 className="font-semibold text-green-800">Jogo Horizontal #{horizontalGame.id}</h4>
                <p className="text-sm text-green-600">Estratégia por Linhas</p>
              </div>
            </div>
            
            <div className="space-y-3">
              <div className="flex justify-between">
                <span className="text-green-700">Acertos:</span>
                <span className="font-bold text-green-800">
                  {profitabilityAnalysis.horizontal.matches} números
                </span>
              </div>
              <div className="flex justify-between">
                <span className="text-green-700">Prêmio:</span>
                <span className="font-bold text-green-600">
                  {formatCurrency(profitabilityAnalysis.horizontal.winnings)}
                </span>
              </div>
              <div className="flex justify-between">
                <span className="text-green-700">Custo:</span>
                <span className="font-bold text-gray-600">
                  {formatCurrency(profitabilityAnalysis.horizontal.cost)}
                </span>
              </div>
              <div className="flex justify-between border-t border-green-200 pt-2">
                <span className="text-green-700 font-medium">Lucro:</span>
                <span className={`font-bold ${
                  profitabilityAnalysis.horizontal.profit >= 0 ? 'text-green-600' : 'text-red-600'
                }`}>
                  {formatCurrency(profitabilityAnalysis.horizontal.profit)}
                </span>
              </div>
              <div className="text-xs text-green-600">
                Probabilidade: {formatOdds(profitabilityAnalysis.horizontal.odds)}
              </div>
            </div>
          </div>
        </div>

        {/* Insights e Recomendações */}
        <div className="bg-yellow-50 border border-yellow-200 rounded-xl p-5">
          <div className="flex items-center space-x-3 mb-4">
            <AlertCircle className="w-6 h-6 text-yellow-600" />
            <h4 className="font-semibold text-yellow-800">Insights e Recomendações</h4>
          </div>
          
          <div className="space-y-3 text-sm">
            {profitabilityAnalysis.combined.isProfit ? (
              <div className="bg-green-100 border border-green-300 rounded-lg p-3">
                <p className="text-green-800">
                  <strong>✅ Estratégia Lucrativa:</strong> Sua combinação de jogos vertical e horizontal 
                  gerou lucro neste concurso. Continue monitorando os padrões!
                </p>
              </div>
            ) : (
              <div className="bg-red-100 border border-red-300 rounded-lg p-3">
                <p className="text-red-800">
                  <strong>⚠️ Prejuízo:</strong> Neste concurso a estratégia não foi lucrativa. 
                  Lembre-se que a Lotomania é um jogo de probabilidade e resultados variam.
                </p>
              </div>
            )}
            
            <div className="bg-blue-100 border border-blue-300 rounded-lg p-3">
              <p className="text-blue-800">
                <strong>📊 Análise Estatística:</strong> Jogos com {profitabilityAnalysis.vertical.matches} 
                e {profitabilityAnalysis.horizontal.matches} acertos têm probabilidades de 
                {formatOdds(profitabilityAnalysis.vertical.odds)} e {formatOdds(profitabilityAnalysis.horizontal.odds)} respectivamente.
              </p>
            </div>
            
            <div className="bg-purple-100 border border-purple-300 rounded-lg p-3">
              <p className="text-purple-800">
                <strong>🎯 Dica Estratégica:</strong> Para otimizar resultados, considere diversificar 
                suas estratégias e jogar responsavelmente dentro de suas possibilidades financeiras.
              </p>
            </div>
          </div>
        </div>

        {/* ROI Histórico Simulado */}
        <div className="mt-6 bg-indigo-50 border border-indigo-200 rounded-xl p-5">
          <div className="flex items-center space-x-3 mb-4">
            <TrendingUp className="w-6 h-6 text-indigo-600" />
            <h4 className="font-semibold text-indigo-800">Simulação de ROI</h4>
          </div>
          
          <p className="text-sm text-indigo-700 mb-3">
            Se você jogasse esta estratégia nos últimos 10 concursos (simulação baseada em probabilidades médias):
          </p>
          
          <div className="grid grid-cols-1 md:grid-cols-3 gap-4 text-center">
            <div>
              <p className="text-indigo-600 text-sm">Investimento Total</p>
              <p className="text-xl font-bold text-indigo-800">
                {formatCurrency(60)} {/* 10 concursos × R$ 6 */}
              </p>
            </div>
            <div>
              <p className="text-indigo-600 text-sm">Retorno Estimado</p>
              <p className="text-xl font-bold text-green-600">
                {formatCurrency(45)} {/* Simulação conservadora */}
              </p>
            </div>
            <div>
              <p className="text-indigo-600 text-sm">ROI Estimado</p>
              <p className="text-xl font-bold text-orange-600">
                -25.0% {/* Realista para loteria */}
              </p>
            </div>
          </div>
          
          <p className="text-xs text-indigo-600 mt-3 text-center">
            * Simulação baseada em probabilidades. Resultados reais podem variar significativamente.
          </p>
        </div>
      </div>
    </div>
  );
};

export default GameProfitabilityAnalysis;
