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

session_start();
require 'conexion.php';

if (!isset($_SESSION['id_usuario'])) {
    die("Sesión no iniciada.");
}

$id_usuario = $_SESSION['id_usuario'];
$consulta = $conexion->query("SELECT rol, id_empresa FROM usuarios_sistema WHERE id_usuario = $id_usuario");

if ($consulta && $datos = $consulta->fetch_assoc()) {
    $rol = $datos['rol'];
    $id_empresa_usuario = $datos['id_empresa'];
} else {
    die("No se pudo obtener los datos del usuario.");
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $nombres = $conexion->real_escape_string($_POST['nombres']);
    $apellido_paterno = $conexion->real_escape_string($_POST['apellido_paterno']);
    $apellido_materno = $conexion->real_escape_string($_POST['apellido_materno']);
    $tipo_documento = $conexion->real_escape_string($_POST['tipo_documento']);
    $numero_documento = $conexion->real_escape_string($_POST['numero_documento']);
    $fecha_nacimiento = $_POST['fecha_nacimiento'];
    $fecha_ingreso = $_POST['fecha_ingreso'];
    $direccion = $conexion->real_escape_string($_POST['direccion']);
  // Verificar si 'distrito' está presente en $_POST antes de utilizarlo
$distrito = isset($_POST['distrito']) ? $conexion->real_escape_string($_POST['distrito']) : null;

    $email = $conexion->real_escape_string($_POST['email']);
    $telefono = $conexion->real_escape_string($_POST['telefono']);
    $cargo = $conexion->real_escape_string($_POST['cargo']);

    $perfil = $conexion->real_escape_string($_POST['perfil']);
    $numero_cuadrilla = $conexion->real_escape_string($_POST['numero_cuadrilla']);
    $vehiculo = $conexion->real_escape_string($_POST['vehiculo']);
    $placa = isset($_POST['placa']) ? $conexion->real_escape_string($_POST['placa']) : null;
    $ctr = $conexion->real_escape_string($_POST['ctr']);
    $numero_ctr = isset($_POST['numero_ctr']) ? $conexion->real_escape_string($_POST['numero_ctr']) : null;
    $zona_trabajo = $conexion->real_escape_string($_POST['zona_trabajo']);
    $produccion = $conexion->real_escape_string($_POST['produccion']);
    $tipo_banco = $conexion->real_escape_string($_POST['tipo_banco']);
    $numero_cuenta = $conexion->real_escape_string($_POST['numero_cuenta']);
  $operadores = isset($_POST['operadores']) ? $conexion->real_escape_string($_POST['operadores']) : '';

$tipo_contrato = $conexion->real_escape_string($_POST['tipo_contrato']);
$monto_sueldo = isset($_POST['monto_sueldo']) && $_POST['monto_sueldo'] !== '' ? $conexion->real_escape_string($_POST['monto_sueldo']) : 'NULL';
$tiene_licencia = $conexion->real_escape_string($_POST['tiene_licencia']);
$numero_licencia = isset($_POST['numero_licencia']) ? $conexion->real_escape_string($_POST['numero_licencia']) : null;


    $foto_dni = null;
    if (isset($_FILES['foto_dni']) && $_FILES['foto_dni']['error'] == 0) {
        $foto_dni = 'uploads/' . basename($_FILES['foto_dni']['name']);
        move_uploaded_file($_FILES['foto_dni']['tmp_name'], $foto_dni);
    }

    // Validaciones previas
    $result_email = $conexion->query("SELECT * FROM usuarios WHERE email = '$email'");
    if ($result_email->num_rows > 0) {
        echo json_encode(['status' => 'error', 'message' => 'El correo ya está registrado.']);
        exit;
    }

    $result_dni = $conexion->query("SELECT * FROM usuarios WHERE numero_documento = '$numero_documento'");
    if ($result_dni->num_rows > 0) {
        echo json_encode(['status' => 'error', 'message' => 'El DNI ya está registrado.']);
        exit;
    }

    if ($rol == 'admin_general') {
        $id_empresa = $_POST['id_empresa'];
        $id_bodega = $_POST['id_bodega'] ?? null;
    } elseif ($rol == 'admin_empresa') {
        $id_empresa = $id_empresa_usuario;
        $id_bodega = $_POST['id_bodega'] ?? null;
    }

    $id_subcontrata = isset($_POST['id_subcontrata']) && $_POST['id_subcontrata'] != '' ? $_POST['id_subcontrata'] : "NULL";
$sql = "INSERT INTO usuarios (
    nombres, apellido_paterno, apellido_materno, tipo_documento, numero_documento, 
    fecha_nacimiento, fecha_ingreso, direccion, distrito, email, telefono, cargo, 
    id_empresa, id_bodega, id_subcontrata, foto_dni,
    perfil, numero_cuadrilla, vehiculo, placa, ctr, numero_ctr, zona_trabajo, 
    produccion, tipo_banco, numero_cuenta, operadores,
    tipo_contrato, monto_sueldo,
    tiene_licencia, numero_licencia
) VALUES (
    '$nombres', '$apellido_paterno', '$apellido_materno', '$tipo_documento', '$numero_documento',
    '$fecha_nacimiento', '$fecha_ingreso', '$direccion', '$distrito', '$email', '$telefono', '$cargo',
    '$id_empresa', " . ($id_bodega ? "'$id_bodega'" : "NULL") . ", $id_subcontrata, " . ($foto_dni ? "'$foto_dni'" : "NULL") . ",
    '$perfil', '$numero_cuadrilla', '$vehiculo', " . ($placa ? "'$placa'" : "NULL") . ", '$ctr', " . ($numero_ctr ? "'$numero_ctr'" : "NULL") . ", '$zona_trabajo',
    '$produccion', '$tipo_banco', '$numero_cuenta', '$operadores',
    '$tipo_contrato', $monto_sueldo,
    '$tiene_licencia', " . ($numero_licencia ? "'$numero_licencia'" : "NULL") . "
)";




    if ($conexion->query($sql)) {
        $usuario_id = $conexion->insert_id;

        // CREDENCIALES DE ACCESO
        $username = $numero_documento;
        $ultimos_digitos = substr($numero_documento, -2);
        $inicial_paterno = strtoupper(substr($apellido_paterno, 0, 1));
        $inicial_materno = strtoupper(substr($apellido_materno, 0, 1));
        $especial = "@";
        $password = substr($ultimos_digitos . $inicial_paterno . $inicial_materno . $especial, 0, 8);
        $hashed_password = password_hash($password, PASSWORD_BCRYPT);

        $check_user = $conexion->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) {
            $nombre_completo = "$nombres $apellido_paterno $apellido_materno";
            $estado = "activo";

            $insert_login = $conexion->prepare("INSERT INTO usuarios_login (id, username, password, nombre_completo, estado) VALUES (?, ?, ?, ?, ?)");
            $insert_login->bind_param("issss", $usuario_id, $username, $hashed_password, $nombre_completo, $estado);

            if ($insert_login->execute()) {
                echo json_encode([
                    'status' => 'success',
                    'message' => 'Usuario guardado exitosamente y credenciales generadas.',
                    'credenciales' => [
                        'usuario' => $username,
                        'password_temporal' => $password
                    ]
                ]);
            } else {
                echo json_encode(['status' => 'error', 'message' => 'Usuario creado, pero error al generar credenciales: ' . $insert_login->error]);
            }

            $insert_login->close();
        } else {
            echo json_encode(['status' => 'warning', 'message' => 'Usuario creado, pero el acceso ya existía.']);
        }

    } else {
        echo json_encode(['status' => 'error', 'message' => 'Hubo un error al guardar el usuario: ' . $conexion->error]);
    }
}
?>
