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

use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Shared\Date;
session_start();

// Verifica que exista la sesión y el ID de usuario
if (!isset($_SESSION['id_usuario'])) {
    echo json_encode(["status" => "error", "message" => "Sesión expirada o no iniciada."]);
    exit;
}

$id_usuario = $_SESSION['id_usuario'];

// Obtener el ID de empresa del usuario desde la base de datos
$usuario_query = $conexion->query("SELECT id_empresa FROM usuarios_sistema WHERE id_usuario = $id_usuario");
if ($usuario_query->num_rows === 0) {
    echo json_encode(["status" => "error", "message" => "Usuario no encontrado."]);
    exit;
}
$id_empresa_usuario = $usuario_query->fetch_assoc()['id_empresa'];

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 = ['cod_pedido', 'nom_cliente', 'dni_cliente', 'direccion_cliente', 'cto1', 'cto2', 'cto3', 'tipo de validaciones', 'paquete', 'estado', 'gestion diaria', 'distrito', 'fecha_gestion', 'tecnico','fec_programacion'];

    $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');
    $conexion->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 = $conexion->query("SHOW COLUMNS FROM trabajos LIKE '$column'");
            if ($result->num_rows == 0) {
                $conexion->query("ALTER TABLE trabajos ADD $column VARCHAR(255) DEFAULT 'N/A'");
            }
        }

        $fecha_hoy = date('Y-m-d'); // Obtiene la fecha actual en formato YYYY-MM-DD

        foreach ($data as $row) {
            if (!empty($row[$indices['cod_pedido']])) {
                $valida_cod_pedido = $row[$indices['cod_pedido']];

// Obtener si ya existe un registro con el misma 'valida_cod_pedido' y la fecha de hoy
$stmt_check = $conexion->prepare("SELECT 1 FROM trabajos WHERE valida_cod_pedido = ? AND DATE(fecha_registro) = ? LIMIT 1");
$stmt_check->bind_param("ss", $valida_cod_pedido, $fecha_hoy);
$stmt_check->execute();
$stmt_check->store_result();

if ($stmt_check->num_rows > 0) {
    // Si se encuentra un registro con la fecha de hoy, lo omitimos
    $registros_omitidos++;
    error_log("Omitido: " . $valida_cod_pedido . " debido a que ya existe con la fecha de hoy ($fecha_hoy).");
    $stmt_check->close();
    continue; // Omitir la inserción de este registro
}
$stmt_check->close();

                // Permitir solo ciertos estados
                $estado_value = strtolower($row[$indices['estado']]);
                $estados_permitidos = ["finalizado", "iniciada", "en camino"];
                if (!in_array($estado_value, $estados_permitidos)) {
                    continue;
                }

                // Tomar los valores de los campos cto1, cto2 y cto3 con valores por defecto si están vacíos
                $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';
                $cliente_value = !empty(trim($row[$indices['nom_cliente']])) ? $row[$indices['nom_cliente']] : null;

                $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';
                $tecnico_value = !empty($row[$indices['tecnico']]) ? $row[$indices['tecnico']] : 'N/A';

$programacion_value = date('Y-m-d'); // Siempre tomar la fecha de hoy


 $estado_values = "Pendiente";
                // Preparar la consulta de inserción
                $sql = "INSERT INTO trabajos (valida_cod_pedido, cliente, dni, direccion, cto, cto1, cto2, cto3, tipo_servicio, paquete, estado, programacion, distrito, fecha_registro, tecnico, id_empresa)
        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

$stmt = $conexion->prepare($sql);
$stmt->bind_param("sssssssssssssssi",
    $valida_cod_pedido,
    $cliente_value,
    $row[$indices['dni_cliente']],
    $row[$indices['direccion_cliente']],
    $cto_value,
    $cto1_value,
    $cto2_value,
    $cto3_value,
    $tipo_servicio_value,
    $paquete_value,
    $estado_values,
    $programacion_value,
    $distrito_value,
    $fecha_registro,
    $tecnico_value,
    $id_empresa_usuario
);


                if ($stmt->execute()) {
                    $nuevos_registros++;
                } else {
                    error_log("Error al insertar el registro con valida_cod_pedido: " . $valida_cod_pedido);
                }

                $stmt->close();
            }
        }

        $conexion->commit();

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

    } catch (Exception $e) {
        $conexion->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."]);
}

$conexion->close();
?>
