<?php
// Activar el reporte de errores
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// Incluir el archivo de conexión
include 'conexion.php';  // Asegúrate de que la ruta sea correcta

// Obtener datos del formulario
$nombres = $_POST['nombres'];
$apellido_paterno = $_POST['apellido_paterno'];
$apellido_materno = $_POST['apellido_materno'];
$tipo_documento = $_POST['tipo_documento'];
$numero_documento = $_POST['numero_documento'];
$fecha_nacimiento = $_POST['fecha_nacimiento'];
$fecha_ingreso = $_POST['fecha_ingreso'];
$direccion = $_POST['direccion'];
$distrito = $_POST['distrito'];
$email = $_POST['email'];
$telefono = $_POST['telefono'];
$cargo = $_POST['cargo'];
$numero_cuadrilla = $_POST['numero_cuadrilla'] ?? null;
$perfil = $_POST['perfil'];
$vehiculo = $_POST['vehiculo'] ?? "No";
$placa = $_POST['placa'] ?? null;
$ctr = $_POST['ctr'] ?? null;
$numero_ctr = $_POST['numero_ctr'] ?? null;
$estado = $_POST['estado'];
$zona_trabajo = $_POST['zona_trabajo'];
$bodega = $_POST['bodega'];

// Manejo de la imagen
$foto_dni = "";
if (isset($_FILES['foto_dni']) && $_FILES['foto_dni']['error'] == 0) {
    $foto_nombre = time() . "_" . basename($_FILES['foto_dni']['name']);
    $foto_ruta = "uploads/" . $foto_nombre;

    if (move_uploaded_file($_FILES['foto_dni']['tmp_name'], $foto_ruta)) {
        $foto_dni = $foto_ruta;
    } else {
        echo json_encode(["status" => "error", "message" => "Error al subir la imagen."]);
        exit;
    }
}

// Verificar si el número de documento o el correo ya existen
$check_doc = $conn->prepare("SELECT COUNT(*) FROM usuarios WHERE numero_documento = ?");
$check_doc->bind_param("s", $numero_documento);
$check_doc->execute();
$check_doc->bind_result($count_doc);
$check_doc->fetch();
$check_doc->close();

$check_email = $conn->prepare("SELECT COUNT(*) FROM usuarios WHERE email = ?");
$check_email->bind_param("s", $email);
$check_email->execute();
$check_email->bind_result($count_email);
$check_email->fetch();
$check_email->close();

if ($count_doc > 0) {
    echo json_encode(["status" => "error", "message" => "El número de documento ya está registrado."]);
    exit;
} elseif ($count_email > 0) {
    echo json_encode(["status" => "error", "message" => "El correo electrónico ya está registrado."]);
    exit;
}

// Insertar en la base de datos
$sql = "INSERT INTO usuarios 
(nombres, apellido_paterno, apellido_materno, tipo_documento, numero_documento, foto_dni, fecha_nacimiento, fecha_ingreso, direccion, distrito, email, telefono, cargo, numero_cuadrilla, perfil, vehiculo, placa, ctr, numero_ctr, estado,bodega,zona_trabajo) 
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?)";

$stmt = $conn->prepare($sql);
if ($stmt === false) {
    echo json_encode(["status" => "error", "message" => "Error al preparar la consulta: " . $conn->error]);
    exit;
}

$stmt->bind_param("ssssssssssssssssssssss", 
    $nombres, $apellido_paterno, $apellido_materno, $tipo_documento, $numero_documento, $foto_dni, $fecha_nacimiento, 
    $fecha_ingreso, $direccion, $distrito, $email, $telefono, $cargo, $numero_cuadrilla, $perfil, $vehiculo, $placa, $ctr, $numero_ctr, $estado,$bodega,$zona_trabajo
);

if ($stmt->execute()) {
    // Obtener el ID del usuario recién insertado
    $usuario_id = $stmt->insert_id;

    // Crear usuario único (DNI del técnico)
    $username = $numero_documento; // Usuario es el DNI

    // Generar la contraseña (últimos 2 dígitos del DNI + iniciales de apellidos + carácter especial)
    $ultimos_digitos = substr($numero_documento, -2); // Últimos 2 dígitos del DNI
    $inicial_paterno = strtoupper(substr($apellido_paterno, 0, 1)); // Inicial del apellido paterno
    $inicial_materno = strtoupper(substr($apellido_materno, 0, 1)); // Inicial del apellido materno
    $especial = "@"; // Puedes cambiarlo si lo deseas

    // Concatenar y limitar la longitud de la contraseña a 8 caracteres
    $password = substr($ultimos_digitos . $inicial_paterno . $inicial_materno . $especial, 0, 8);
    $hashed_password = password_hash($password, PASSWORD_BCRYPT); // 🔐 Cifrado seguro

    // Verificar si el usuario ya existe
    $check_user = $conn->prepare("SELECT COUNT(*) FROM usuarios_login WHERE username = ?");
    $check_user->bind_param("s", $username);
    $check_user->execute();
    $check_user->bind_result($count);
    $check_user->fetch();
    $check_user->close();

    if (intval($count) === 0) {
        // Insertar en usuarios_login con la ID de usuario recién insertado
        $insert_login = $conn->prepare("INSERT INTO usuarios_login (id, username, password, nombre_completo, estado) VALUES (?, ?, ?, ?, ?)");
        $nombre_completo = "$nombres $apellido_paterno $apellido_materno";
        $insert_login->bind_param("issss", $usuario_id, $username, $hashed_password, $nombre_completo, $estado);
        
        if ($insert_login->execute()) {
            echo json_encode(["status" => "success", "message" => "Usuario registrado con éxito y acceso creado."]);
        } else {
            echo json_encode(["status" => "error", "message" => "Error al crear usuario de acceso: " . $insert_login->error]);
        }
        
        $insert_login->close();
    } else {
        echo json_encode(["status" => "error", "message" => "El usuario de acceso ya existe."]);
    }
} else {
    echo json_encode(["status" => "error", "message" => "Error al insertar el usuario: " . $stmt->error]);
}

$stmt->close();
$conn->close();
?>
