<?php
require_once '../classes/OMIE.php';

function formatPriceMWh($numero, $decimales = 2): string
{
    $numero = (float) $numero * 1000;
    $factor = pow(10, $decimales);
    $truncado = floor($numero * $factor) / $factor;
    return number_format($truncado, $decimales, ',', '') . ' €/MWh';
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $fecha_inicio = $_POST['fecha_inicio'];
    $fecha_fin = $_POST['fecha_fin'];

    $omie = new OMIE();

    $precio_medio_mensual = $omie->getPrecioMedioMensualPorRango($fecha_inicio, $fecha_fin);
    $precios_mensuales_array = [];
    foreach ($precio_medio_mensual as $fila) {
        $precios_mensuales_array[$fila['mes']] = formatPriceMWh($fila['precio_medio_mensual']);
    }

    $precio_medio_solar_mensual = $omie->getPrecioMedioSolarMensualPorRango($fecha_inicio, $fecha_fin);
    $precio_mensual_solar = [];
    foreach ($precio_medio_solar_mensual as $fila) {
        $precio_mensual_solar[$fila['mes']] = formatPriceMWh($fila['precio_medio_solar_mensual']);
    }

    $precios_medios_anuales = $omie->getPrecioMedioAnualPorRango($fecha_inicio, $fecha_fin);
    $precio_medio_anual = [];
    foreach ($precios_medios_anuales as $anio) {
        $precio_medio_anual[$anio['anio']] = formatPriceMWh($anio['precio_medio_anual']);
    }

    $precio_medio_omie_solar = $omie->getPrecioMedioSolarPorDia($fecha_inicio, $fecha_fin);
    $precio_medio_solar = [];
    foreach ($precio_medio_omie_solar as $solar) {
        $precio_medio_solar[$solar['Fecha']] = formatPriceMWh($solar['pre_medio_dia_solar']);
    }

    $inicio_mes_anterior = date('Y-m-01', strtotime('-1 month', strtotime($fecha_inicio)));
    $fin_mes_anterior = date('Y-m-t', strtotime('-1 month', strtotime($fecha_fin)));
    $precio_medio_mes_anterior = $omie->getPrecioMedioMensualPorRango($inicio_mes_anterior, $fin_mes_anterior);

    $precio_medio_meses_anterior = [];
    foreach ($precio_medio_mes_anterior as $mes) {
        $precio_medio_meses_anterior[$mes['mes']] = formatPriceMWh($mes['precio_medio_mensual']);
    }

    $preciosAnuales = $omie->getPrecioAcumuladoAnualSolar($fecha_inicio, $fecha_fin);
    $precio_medio_acumulado_anual = [];
    foreach ($preciosAnuales as $anio) {
        $precio_medio_acumulado_anual[$anio['anio']] = formatPriceMWh($anio['precio_medio_acumulado_anual']);
    }

    $dias_semana = [
        'Monday' => 'L', 'Tuesday' => 'M', 'Wednesday' => 'M',
        'Thursday' => 'J', 'Friday' => 'V', 'Saturday' => 'S', 'Sunday' => 'D'
    ];

    echo '<style>
    thead th {
        background-color: #c2e59b !important;
        color: #5b6065 !important;
        min-width: 100px;
    }
</style>';

    echo '<div class="table-responsive" style="overflow-x: auto;">';
    echo '<table class="table table-hover table-bordered align-middle shadow-lg" style="table-layout: auto; width: 100%; font-size: 14px;">';
    echo '<thead class="text-center">
        <tr>
            <th class="py-3">Fecha</th>
            <th class="py-3">PreMedioDia OMIE</th>
            <th class="py-3">PreMedioDia H.Solar</th>
            <th class="py-3">PreMedioMes OMIE</th>
            <th class="py-3">PreMedioMes HoraSolar</th>
            <th class="py-3">PreMedioOMIE Mes Anterior</th>
            <th class="py-3">PreMedioOMIE Año</th>
            <th class="py-3">PreMedioAnual HorasSolar</th>
            <th class="py-3">Exportar Horas/Dia</th>
        </tr>
      </thead><tbody>';

    $precio_medio_dia = $omie->getPrecioMedioPorDia($fecha_inicio, $fecha_fin);

    if (empty($precio_medio_dia)) {
        echo '<tr><td colspan="9" class="text-center text-danger fw-bold py-4" style="font-size: 16px;">No se encontraron datos para la consulta seleccionada.</td></tr>';
    } else {
        foreach ($precio_medio_dia as $resultado) {
            $fecha = $resultado['OMI_FEC'];
            $precio_medio_formateado = formatPriceMWh($resultado['precio_medio']);
            $precio_medio_omie_solar_formateado = $precio_medio_solar[$fecha] ?? 'Sin datos';

            $mes_actual = date('Y-m', strtotime($fecha));
            $anio_actual = date('Y', strtotime($fecha));
            $mes_anterior = date('Y-m', strtotime('-1 month', strtotime($fecha)));

            $media_mes_actual_formateada = $precios_mensuales_array[$mes_actual] ?? 'Sin datos';
            $media_mes_solar_actual_formateada = $precio_mensual_solar[$mes_actual] ?? 'Sin datos';
            $media_mes_anterior_formateada = $precio_medio_meses_anterior[$mes_anterior] ?? 'Sin datos';

            $num_meses_con_datos = count(array_filter($precio_medio_mensual, function ($fila) use ($anio_actual) {
                return isset($fila['mes']) && strpos((string) $fila['mes'], $anio_actual) !== false;
            }));

            $precio_medio = isset($precio_medio_anual[$anio_actual])
                ? (float) str_replace(',', '.', preg_replace('/[^0-9,.]/', '', $precio_medio_anual[$anio_actual]))
                : null;

            $precio_medio_acumulado = isset($precio_medio_acumulado_anual[$anio_actual])
                ? (float) str_replace(',', '.', preg_replace('/[^0-9,.]/', '', $precio_medio_acumulado_anual[$anio_actual]))
                : null;

            $precio_medio_anual_formateado = $precio_medio !== null
                ? '<div style="display: flex; flex-direction: column; align-items: center;">' .
                    number_format($precio_medio, 2, ',', '') . ' €/MWh' .
                    ($num_meses_con_datos < 12
                        ? '<div class="text-warning" style="font-size: 12px; margin-top: 2px;" data-bs-toggle="tooltip" title="Este valor es parcial debido a datos incompletos">(Datos parciales)</div>'
                        : '') .
                  '</div>'
                : '<div class="text-center"><span class="text-warning" style="font-size: 12px;">Datos incompletos</span></div>';

            $precio_medio_acumulado_anual_formateado = $precio_medio_acumulado !== null
                ? '<div style="display: flex; flex-direction: column; align-items: center;">' .
                    number_format($precio_medio_acumulado, 2, ',', '') . ' €/MWh' .
                    ($num_meses_con_datos < 12
                        ? '<div class="text-warning" style="font-size: 12px; margin-top: 2px;" data-bs-toggle="tooltip" title="Este valor es parcial debido a datos incompletos">(Datos parciales)</div>'
                        : '') .
                  '</div>'
                : '<div class="text-center"><span class="text-warning" style="font-size: 12px;">Datos incompletos</span></div>';

            $dia_semana = $dias_semana[date('l', strtotime($fecha))];
            $fecha_formateada = "{$dia_semana} " . date('d-m-y', strtotime($fecha));
            $export_link = "ajax/get_precios_hoy.php?export=excel&fecha={$fecha}";

            echo "<tr class='hover-row' style='background-color: #f8f9fa;'>";
            echo "<td class='text-center'><a href='#' class='detalle-dia text-decoration-none fw-bold small' data-fecha='{$fecha}'>{$fecha_formateada}</a></td>";
            echo "<td class='text-center py-2'>{$precio_medio_formateado}</td>";
            echo "<td class='text-center py-2'>{$precio_medio_omie_solar_formateado}</td>";
            echo "<td class='text-center py-2'>{$media_mes_actual_formateada}</td>";
            echo "<td class='text-center py-2'>{$media_mes_solar_actual_formateada}</td>";
            echo "<td class='text-center py-2'>{$media_mes_anterior_formateada}</td>";
            echo "<td class='text-center py-2'>{$precio_medio_anual_formateado}</td>";
            echo "<td class='text-center py-2'>{$precio_medio_acumulado_anual_formateado}</td>";
            echo "<td class='text-center py-2'>
                    <a href='{$export_link}' class='btn btn-success btn-sm px-3 py-1'>
                        <i class='bi bi-file-earmark-excel-fill'></i> Exportar
                    </a>
                  </td>";
            echo '</tr>';
        }
    }

    echo '<div class="mt-2 text-muted small text-center" style="font-size: 18px;">
        <em>Nota: Los precios medios mostrados se expresan en €/MWh.</em>
      </div>';

    echo '</tbody></table>';
    echo '</div>';
}
?>
