import React, { useState, useRef } from 'react';
import {
  Box, CircularProgress, Alert, Table, TableBody, TableCell, TableContainer,
  TableHead, TableRow, Paper, Typography, Dialog, DialogTitle,
  DialogContent, IconButton
} from '@mui/material';
import CloseIcon from '@mui/icons-material/Close';
import ArrowUpwardIcon from '@mui/icons-material/ArrowUpward';
import ArrowDownwardIcon from '@mui/icons-material/ArrowDownward';
import RemoveIcon from '@mui/icons-material/Remove';
import { PiChartLineUpBold } from 'react-icons/pi';
// Importaciones de nuestro proyecto
import type { CotizacionBolsa } from '../models/mercadoModels';
import { useApiData } from '../hooks/useApiData';
import { useIsHoliday } from '../hooks/useIsHoliday';
import { formatFullDateTime, formatCurrency } from '../utils/formatters';
import { HistoricalChartWidget } from './HistoricalChartWidget';
import { HolidayAlert } from './common/HolidayAlert';
/**
 * Sub-componente para mostrar la variación porcentual con un icono y color apropiado.
 */
const Variacion = ({ value }: { value: number }) => {
  const color = value > 0 ? 'success.main' : value < 0 ? 'error.main' : 'text.secondary';
  const Icon = value > 0 ? ArrowUpwardIcon : value < 0 ? ArrowDownwardIcon : RemoveIcon;
  return (
    
      
      {value.toFixed(2)}%
    
  );
};
/**
 * Widget autónomo para la tabla de acciones líderes locales (Panel Merval).
 */
export const BolsaLocalWidget = () => {
  // Este widget obtiene todos los datos del mercado local y luego los filtra.
  const { data, loading: dataLoading, error: dataError } = useApiData('/mercados/bolsa/local');
  const isHoliday = useIsHoliday('BA');
  
  const [selectedTicker, setSelectedTicker] = useState(null);
  const triggerButtonRef = useRef(null);
  const handleOpenModal = (ticker: string, event: React.MouseEvent) => {
    triggerButtonRef.current = event.currentTarget;
    setSelectedTicker(ticker);
  };
  
  const handleCloseDialog = () => {
    setSelectedTicker(null);
    setTimeout(() => {
      triggerButtonRef.current?.focus();
    }, 0);
  };
  
  // Filtramos para obtener solo las acciones, excluyendo el índice.
  const panelPrincipal = data?.filter(d => d.ticker !== '^MERV') || [];
  const isLoading = dataLoading || isHoliday === null;
  if (isLoading) {
    return ;
  }
  if (dataError) {
    return {dataError};
  }
  
  // Si después de filtrar no queda ninguna acción, mostramos el mensaje apropiado.
  if (panelPrincipal.length === 0) {
      // Si sabemos que es feriado, la alerta de feriado es el mensaje más relevante.
      if (isHoliday) {
          return ;
      }
      return No hay acciones líderes disponibles para mostrar.;
  }
  return (
    
      {/* La alerta de feriado también se aplica a esta tabla. */}
      {isHoliday && (
        
          
        
      )}
      
        
          
            Última actualización de acciones: {formatFullDateTime(panelPrincipal[0].fechaRegistro)}
          
        
        
          
            
              Símbolo
              Precio Actual
              Apertura
              Cierre Anterior
              % Cambio
              Historial
            
          
          
            {panelPrincipal.map((row) => (
              
                {row.ticker}
                ${formatCurrency(row.precioActual)}
                ${formatCurrency(row.apertura)}
                ${formatCurrency(row.cierreAnterior)}
                
                
                   handleOpenModal(row.ticker, event)}
                    sx={{
                      boxShadow: '0 1px 3px rgba(0,0,0,0.1)',
                      transition: 'all 0.2s ease-in-out',
                      '&:hover': { transform: 'scale(1.1)', boxShadow: '0 2px 6px rgba(0,0,0,0.2)' }
                    }}
                  >
                    
                  
                
              
            ))}
          
        
      
      
    
  );
};