<?php 
require_once('../../../includes/load.php');
require_once('../../../vendor/autoload.php');

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Fill;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
use PhpOffice\PhpSpreadsheet\Calculation\DateTime;

$anio = $_POST['anio'];
$mesA = $_POST['mes'];


$consulta= $db->query("SELECT KmRecorrido, TotalCostos, TotalTarifa, anio, mes, placa, created_at FROM tb_maestra WHERE anio = '$anio'AND mes = '$mesA'  ORDER BY created_at DESC"); 
 

$documento = new Spreadsheet();
$sheet = $documento->getActiveSheet();
$sheet->setTitle("Tarifario");

// Fusionar la fila 1 con las columnas A2 a A3
$sheet->mergeCells('A2:A3');
$sheet->setCellValue('A2', 'TARIFA');
// Agregar un color de fondo a la celda fusionada
$style = $sheet->getStyle('A2');
$style->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('FFFF00'); // Color de fondo 

// Aplicar negrita al rango de celdas de A2 a A3
$range = 'A2:A3';
$style = $sheet->getStyle($range);
$font = $style->getFont();
$font->setBold(true); // Aplicar negrita

//Obtener el mes en nombre
$mesTexto = '';
for ($i = 1; $i <= 12; $i++) {
    $value = ($i < 10) ? '0' . $i : $i;
    
    switch ($value) {
        case '1': $mesTexto = 'Enero'; break;
        case '2': $mesTexto = 'Febrero'; break;
        case '3': $mesTexto = 'Marzo'; break;
        case '4': $mesTexto = 'Abril'; break;
        case '5': $mesTexto = 'Mayo'; break;
        case '6': $mesTexto = 'Junio'; break;
        case '7': $mesTexto = 'Julio'; break;
        case '8': $mesTexto = 'Agosto'; break;
        case '9': $mesTexto = 'Septiembre'; break;
        case '10': $mesTexto = 'Octubre'; break;
        case '11': $mesTexto = 'Noviembre'; break;
        case '12': $mesTexto = 'Diciembre'; break;
        default: $mesTexto = 'No válido'; break;
    }
    
    if ($value == $mesA) {
        break; // Salir del bucle si se encuentra el mes correspondiente
    }
}


// Fusionar la fila 1 con las columnas 	B2 a D2
$sheet->mergeCells('B2:D2');
$sheet->setCellValue('B2', $mesTexto);

// Agregar un color de fondo a la celda fusionada
$style = $sheet->getStyle('B2');
$style->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('E2EEDA'); // Color de fondo 

$sheet->setCellValue('B3', 'Tarifa');
$sheet->setCellValue('C3', 'KM Recorrido');
$sheet->setCellValue('D3', 'Costo Total');

// Definir el rango de celdas de A10 a L10
$range = 'B3:D3';

// Aplicar un color de fondo al rango de celdas
$style = $sheet->getStyle($range);
$fill = $style->getFill();
$fill->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('E2EEDA'); // Color de fondo 

// Definir el rango de celdas de A10 a L10
$range = 'A2:D3';

// Aplicar bordes al rango de celdas
$style = $sheet->getStyle($range);
$borders = $style->getBorders();

// Establecer estilo de borde para todas las direcciones
$borders->getAllBorders()->setBorderStyle(Border::BORDER_THIN); 


$row = 4; // Fila inicial para los datos

$total = 0; // Inicializar la variable para la suma 
while ($rowData = $consulta->fetch_assoc()) {
    $sheet->setCellValue('A' . $row, $rowData['placa']);
    $sheet->setCellValue('B' . $row, $rowData['TotalTarifa']);
    $sheet->setCellValue('C' . $row, $rowData['KmRecorrido']);
    $sheet->setCellValue('D' . $row, $rowData['TotalCostos']);

    // Aplicar bordes a cada celda en la fila actual
    $cellRange = 'A' . $row . ':D' . $row;
    $style = $sheet->getStyle($cellRange);
    $borders = $style->getBorders();
    $borders->getAllBorders()->setBorderStyle(Border::BORDER_THIN);

    // Sumar el valor de 'TotalCostos' en cada fila
    $total += $rowData['TotalCostos'];
   
    // Incrementar el contador de fila 
    $row++;
}   

// Colocar el total en una celda específica
$sheet->setCellValue('D' . $row, $total);

// Centrar el texto en las celdas combinadas (horizontal y vertical)
$style = $sheet->getStyle('A1:D1' . ($row - 1));
$style->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER);
$style->getAlignment()->setVertical(Alignment::VERTICAL_CENTER);

// Ajustar el ancho de las columnas automáticamente
$startColumn = 'A';
$endColumn = 'D';

$startIndex = Coordinate::columnIndexFromString($startColumn);
$endIndex = Coordinate::columnIndexFromString($endColumn);

for ($columnIndex = $startIndex; $columnIndex <= $endIndex; $columnIndex++) {
    $column = Coordinate::stringFromColumnIndex($columnIndex);
    $sheet->getColumnDimension($column)->setAutoSize(true);
}

$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($documento, 'Xlsx');

$file_name = 'Reporte de ' . $mesTexto . ' del ' . $anio;

$writer->save($file_name);

header('Content-Type: application/x-www-form-urlencoded');

header('Content-Transfer-Encoding: Binary');

header("Content-disposition: attachment; filename=\"".$file_name.".xlsx\"");

readfile($file_name);

unlink($file_name);
exit;
?>


