/**
 * Preparación de datos para gráficas de Varroa
 */

import { ResultadoPrediccion, DatosGrafica } from './types';
import { CONSTANTES_VARROA } from './constants';

/**
 * Prepara los datos para la gráfica de predicción de Varroa
 * @param prediccion - Resultados de la predicción
 * @returns Datos formateados para la gráfica
 */
export function prepararDatosGrafica(prediccion: ResultadoPrediccion): DatosGrafica {
  // Extraer datos de la predicción
  const { resultadosDiarios, parametrosEntrada } = prediccion;
  
  // Preparar arrays para la gráfica
  const fechas: Date[] = [];
  const poblacionAcaros: number[] = [];
  const caidaNatural: number[] = [];
  const infestacionAbejas: number[] = [];
  
  // Llenar arrays con datos
  resultadosDiarios.forEach(resultado => {
    fechas.push(resultado.fecha);
    poblacionAcaros.push(Math.round(resultado.poblacionAcaros));
    caidaNatural.push(Math.round(resultado.caidaNatural * 10) / 10);
    infestacionAbejas.push(Math.round(resultado.infestacionAbejas * 100) / 100);
  });
  
  // Preparar datos de tratamientos para la gráfica
  const tratamientos = parametrosEntrada.tratamientos.map(tratamiento => ({
    fecha: tratamiento.fecha,
    eficiencia: tratamiento.eficiencia,
    nombre: tratamiento.nombre
  }));
  
  // Retornar datos formateados
  return {
    fechas,
    poblacionAcaros,
    caidaNatural,
    infestacionAbejas,
    umbralesCriticos: {
      poblacion: 0, // No hay un umbral crítico para la población total
      caidaNatural: CONSTANTES_VARROA.UMBRAL_CAIDA_NATURAL_VERANO,
      infestacionAbejas: CONSTANTES_VARROA.UMBRAL_INFESTACION_CRITICO
    },
    tratamientos
  };
}

/**
 * Prepara datos para gráfica en formato Recharts
 * @param datosGrafica - Datos de la gráfica
 * @returns Array de objetos para Recharts
 */
export function prepararDatosRecharts(datosGrafica: DatosGrafica): any[] {
  const { fechas, poblacionAcaros, caidaNatural, infestacionAbejas } = datosGrafica;
  
  // Crear array de objetos para Recharts
  return fechas.map((fecha, index) => {
    const mes = fecha.toLocaleString('default', { month: 'short' });
    const dia = fecha.getDate();
    
    return {
      fecha: fecha,
      etiqueta: `${dia} ${mes}`,
      poblacionAcaros: poblacionAcaros[index],
      caidaNatural: caidaNatural[index],
      infestacionAbejas: infestacionAbejas[index]
    };
  });
}
