<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Style\Fill;

require 'conexion.php'; // Conexión a la base de datos

// Consulta para obtener los datos
$sql = "WITH trabajos_ordenados AS (
  SELECT *,
         ROW_NUMBER() OVER (PARTITION BY valida_cod_pedido ORDER BY id ASC) AS rn
  FROM trabajos
),
formularios_ordenados AS (
  SELECT tf.*,
         ROW_NUMBER() OVER (PARTITION BY tf.trabajo_id_hidden ORDER BY tf.id ASC) AS rn
  FROM trabajos_formulario tf
)
SELECT f.*, 
       u.numero_cuadrilla AS cuadrilla,
       u.perfil AS perfil,
       u.email AS correo_usuario,
       CONCAT(u.nombres, ' ', u.apellido_paterno, ' ', u.apellido_materno) AS nombre_usuario,
       h.herramienta, 
       h.cantidad,
       f.trabajo_id_hidden AS pedido,
       f.fecha_creacion AS fecha_creacion,
       f.serie_nueva AS serie_nueva,
       f.serie_baja AS serie_baja,
       f.cto AS cto_real,
       t.programacion AS programacion,
       f.metraje_termino AS drop2,
       f.foto_metraje_inicio AS fotoinicio,
       f.foto_metraje_termino AS fotofinal,
       f.comentario AS comentarios,
       f.n_boleta AS boleta,
       u.bodega,
       t.distrito AS distrito,
       t.paquete AS plan
FROM formularios_ordenados f
LEFT JOIN trabajos_ordenados t 
  ON f.trabajo_id_hidden = t.valida_cod_pedido AND f.rn = t.rn
LEFT JOIN herramientas h ON f.id = h.trabajo_id
LEFT JOIN usuarios u ON f.user_id = u.id
ORDER BY f.id ASC;";

$result = $conn->query($sql);

// Cabeceras fijas definidas con correcciones ortográficas y estandarización
$headers = [
    "FECHA LIQUIDADOR", 
    "BODEGA", 
    "TECNICO", 
    "N° K", 
    "PERFIL", 
    "PEDIDO", 
    "N° DOC", 
    "CLIENTE", 
    "DIRECCION", 
    "DISTRITO", 
    "F. ATENCION", 
    "ESCENARIO", 
    "PLAN", 
    "CTO", 
    "TIPO DE SERVICIO", 
    "ONT NUEVA", 
    "ONT AVERIADA",  // Corregido: "ONT AVERIADA"
    "DROP", 
    "CONECTORES SC/APC",  // Corregido: "CONECTORES SC/APC"
    "PATCH CORD",  // Corregido: "PATCH CORD"
      "ACOPLADOR",
    "ROSETA ÓPTICA",  // Corregido: "ROSETA ÓPTICA"
    "CINTA DOBLE CONTACTO (CM)",
    "CLEVYS", 
    "HEBILLAS", 
    "CINTA BANDING", 
    "TARUGOS", 
    "ANCLAJE TIPO P", 
    "CINTILLO ROTULADOR", 
    "TEMPLADORES TIPO P", 
    "CINTILLO NUM 20",  // Corregido: "CINTILLO NUM 20"
    "GRAPAS", 
    "CINTA AISLANTE",
];

// Recolecta las herramientas únicas
$tools = [];
while ($row = $result->fetch_assoc()) {
    if ($row['herramienta'] && !in_array(strtolower($row['herramienta']), array_map('strtolower', $tools))) {
        $tools[] = $row['herramienta'];
    }
}

// Agregar herramientas como cabeceras dinámicamente (solo herramientas únicas)
foreach ($tools as $tool) {
    if (!in_array(strtolower($tool), array_map('strtolower', $headers))) {
        $headers[] = $tool;  // Asegura que cada herramienta sea única
    }
}

// Mover "Comentarios" y agregar "BOLETA" al final
$headers[] = 'Comentarios';
$headers[] = 'N° BOLETA';



if (isset($_GET['export']) && $_GET['export'] == 'excel') {
    $spreadsheet = new Spreadsheet();
    $sheet = $spreadsheet->getActiveSheet();
    $sheet->fromArray($headers, NULL, 'A1');

    // Estilo para las cabeceras
    $headerStyle = [
        'font' => [
            'bold' => true,
            'color' => ['argb' => 'FFFFFF'],  // Color de texto blanco
            'size' => 12
        ],
        'alignment' => [
            'horizontal' => Alignment::HORIZONTAL_CENTER,
            'vertical' => Alignment::VERTICAL_CENTER,
        ],
        'fill' => [
            'fillType' => Fill::FILL_SOLID,
            'startColor' => ['argb' => 'A8C9E7'],  // Color celeste para el fondo
        ],
        'borders' => [
            'allBorders' => [
                'borderStyle' => Border::BORDER_THIN,  // Bordes finos
                'color' => ['argb' => '000000'],  // Color negro para los bordes
            ],
        ]
    ];

    // Aplicar el estilo a las cabeceras (primera fila)
    $sheet->getStyle('A1:' . $sheet->getHighestColumn() . '1')->applyFromArray($headerStyle);

    // Organizar los trabajos
    $trabajos = [];
    $result->data_seek(0);

    // Organizar los trabajos y sus herramientas
    while ($row = $result->fetch_assoc()) {
        $trabajoId = $row['id'];
        if (!isset($trabajos[$trabajoId])) {
            $trabajos[$trabajoId] = [
                'datos' => $row,
                'herramientas' => [],
                'cantidades' => []
            ];
        }

        // Asociar las herramientas y cantidades al trabajo
        if ($row['herramienta']) {
            $trabajos[$trabajoId]['herramientas'][] = $row['herramienta'];
            $trabajos[$trabajoId]['cantidades'][] = $row['cantidad'];
        }
    }

    // Insertar los datos en el archivo Excel
    $rowNum = 2;  // Inicia en la fila 2 (después de las cabeceras)
    foreach ($trabajos as $trabajo) {
        $row = $trabajo['datos'];
        $data = array_fill(0, count($headers), ""); // Crear un array con el mismo tamaño que las cabeceras

        // Asignar los datos generales del trabajo
        $data[0] = isset($row["fecha_creacion"]) ? date("d/m/Y H:i", strtotime($row["fecha_creacion"])) : "";
        $data[1] = htmlspecialchars($row["bodega"] ?? "");
        $data[2] = htmlspecialchars($row["nombre_usuario"] ?? "");
        $data[3] = htmlspecialchars($row["cuadrilla"] ?? "");
        $data[4] = htmlspecialchars($row["perfil"] ?? "");
        $data[5] = htmlspecialchars($row["pedido"] ?? "");
        $data[6] = htmlspecialchars($row["dni"] ?? "");
        $data[7] = htmlspecialchars($row["cliente"] ?? "");
        $data[8] = htmlspecialchars($row["direccion"] ?? "");
        $data[9] = htmlspecialchars($row["distrito"] ?? "");
    $data[10] = isset($row["programacion"]) && !empty($row["programacion"])
    ? (preg_match("/^\d{2}\/\d{2}\/\d{4}$/", $row["programacion"]) 
        ? $row["programacion"] 
        : date("d/m/Y", strtotime($row["programacion"])))
    : "";


        $data[11] = htmlspecialchars($row["escenario"] ?? "");
        $data[12] = htmlspecialchars($row["plan"] ?? "");
        $data[13] = htmlspecialchars($row["cto_real"] ?? "");
        $data[14] = htmlspecialchars($row["tipo_servicio"] ?? "");
        $data[15] = htmlspecialchars($row["serie_nueva"] ?? "");
        $data[16] = htmlspecialchars($row["serie_baja"] ?? "");
        $data[17] = htmlspecialchars($row["drop2"] ?? "");

        // Asignar las herramientas y sus cantidades en las columnas correspondientes
        foreach ($tools as $tool) {
            $toolColumnIndex = array_search(strtolower($tool), array_map('strtolower', $headers));
            if ($toolColumnIndex !== false) {
                $toolIndex = array_search($tool, $trabajo['herramientas']);
                $data[$toolColumnIndex] = $toolIndex !== false ? $trabajo['cantidades'][$toolIndex] : "";
            }
        }


        // Insertar la boleta en la última columna
$data[count($headers) - 1] = htmlspecialchars($row["boleta"] ?? "");
// Insertar el comentario en la última columna (comentarios)
$data[count($headers) - 2] = htmlspecialchars($row["comentarios"] ?? "");

        // Escribir la fila en la hoja
        $sheet->fromArray($data, NULL, 'A' . $rowNum);
        $rowNum++;
    }

  // Ajustar automáticamente el ancho de las columnas según el contenido
    foreach ($headers as $index => $header) {
        $column = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::stringFromColumnIndex($index + 1);
        $sheet->getColumnDimension($column)->setAutoSize(true);
    }
    // Generar el archivo Excel
    $writer = new Xlsx($spreadsheet);
    $fileName = 'Reporte_trabajos_' . date('Ymd_His') . '.xlsx';
    $writer->save($fileName);

    // Forzar la descarga del archivo generado
    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    header('Content-Disposition: attachment;filename="' . $fileName . '"');
    header('Cache-Control: max-age=0');
    readfile($fileName);
    exit();
}
?>
