<?php
include 'conexion.php';
require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\IOFactory;

if ($_FILES["archivo_excel"]["error"] == 0) {
    $file_name = $_FILES["archivo_excel"]["tmp_name"];
    $spreadsheet = IOFactory::load($file_name);
    $sheet = $spreadsheet->getActiveSheet();
    $data = $sheet->toArray();

    $headers = array_map(fn($h) => is_string($h) ? strtolower($h) : '', $data[0]);

    $required_columns = ['valida_cod_pedido', 'cliente', 'dni', 'direccion', 'cto1', 'cto2', 'cto3', 'tipo de validaciones', 'paquete', 'estado', 'gestion diaria', 'distrito', 'fecha_registro'];
    $missing_columns = [];
    $indices = [];

    foreach ($required_columns as $column) {
        $index = array_search($column, $headers);
        if ($index === false) {
            $missing_columns[] = $column;
        } else {
            $indices[$column] = $index;
        }
    }

    if (!empty($missing_columns)) {
        echo json_encode(["status" => "error", "message" => "Faltan las siguientes columnas en el archivo: " . implode(", ", $missing_columns)]);
        exit;
    }

    unset($data[0]); 

    $fecha_registro = date('Y-m-d H:i:s');
    $conn->begin_transaction();

    try {
        $nuevos_registros = 0;
        $registros_omitidos = 0;

        // Verificar si las columnas cto1, cto2, cto3 existen en la base de datos, si no, agregarlas
        $columns_check = ["cto1", "cto2", "cto3"];
        foreach ($columns_check as $column) {
            $result = $conn->query("SHOW COLUMNS FROM trabajos LIKE '$column'");
            if ($result->num_rows == 0) {
                // Agregar la columna si no existe
                $conn->query("ALTER TABLE trabajos ADD $column VARCHAR(255) DEFAULT 'N/A'");
            }
        }

        foreach ($data as $row) {
            if (!empty($row[$indices['valida_cod_pedido']])) {
                $valida_cod_pedido = $row[$indices['valida_cod_pedido']];
                
                $stmt_check = $conn->prepare("SELECT COUNT(*) FROM trabajos WHERE valida_cod_pedido = ?");
                $stmt_check->bind_param("s", $valida_cod_pedido);
                $stmt_check->execute();
                $stmt_check->bind_result($existe);
                $stmt_check->fetch();
                $stmt_check->close();

                if ($existe > 0) {
                    $registros_omitidos++;
                    continue;
                }

               // Permitir solo los estados específicos
$estado_value = strtolower($row[$indices['estado']]);
$estados_permitidos = ["finalizada", "iniciada", "en camino", "coordinado"];

if (!in_array($estado_value, $estados_permitidos)) {
    continue; // Omitir si no es un estado permitido
}


                $cto1_value = !empty($row[$indices['cto1']]) ? $row[$indices['cto1']] : 'N/A';
                $cto2_value = !empty($row[$indices['cto2']]) ? $row[$indices['cto2']] : 'N/A';
                $cto3_value = !empty($row[$indices['cto3']]) ? $row[$indices['cto3']] : 'N/A';

                $paquete_value = !empty($row[$indices['paquete']]) ? $row[$indices['paquete']] : 'N/A';
                $tipo_servicio_value = !empty($row[$indices['tipo de validaciones']]) ? $row[$indices['tipo de validaciones']] : 'Sin especificar';
                $distrito_value = !empty($row[$indices['distrito']]) ? $row[$indices['distrito']] : 'No especificado';

                if (!empty($row[$indices['gestion diaria']])) {
                    $fecha_raw = $row[$indices['gestion diaria']];
                    $fecha_limpia = preg_replace('/[^0-9\-]/', '', $fecha_raw);
                    $programacion_value = DateTime::createFromFormat('Y-m-d', $fecha_limpia) ?: DateTime::createFromFormat('Y-n-j', $fecha_limpia);
                    $programacion_value = $programacion_value ? $programacion_value->format('Y-m-d') . ' 00:00:00' : null;
                } else {
                    $programacion_value = null;
                }

                $estado_values = "Pendiente";

                $sql = "INSERT INTO trabajos (valida_cod_pedido, cliente, dni, direccion, cto, cto1, cto2, cto3, tipo_servicio, paquete, estado, programacion, distrito, fecha_registro)
                        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

                $stmt = $conn->prepare($sql);
                $stmt->bind_param("ssssssssssssss",
                    $valida_cod_pedido,
                    $row[$indices['cliente']],
                    $row[$indices['dni']],
                    $row[$indices['direccion']],
                    $cto_value,
                    $cto1_value,
                    $cto2_value,
                    $cto3_value,
                    $tipo_servicio_value,
                    $paquete_value,
                    $estado_values,
                    $programacion_value,
                    $distrito_value,
                    $fecha_registro
                );

                if ($stmt->execute()) {
                    $nuevos_registros++;
                }
                $stmt->close();
            }
        }

        $conn->commit();

        echo json_encode([
            "status" => "success",
            "message" => "Se insertaron $nuevos_registros registros nuevos. Se omitieron $registros_omitidos registros duplicados."
        ]);

    } catch (Exception $e) {
        $conn->rollback();
        echo json_encode(["status" => "error", "message" => "Error al procesar los datos: " . $e->getMessage()]);
    }
} else {
    echo json_encode(["status" => "error", "message" => "Error al subir el archivo."]);
}

$conn->close();
?>
