<?php
// api_poligrafia/gestion_usuario/update.php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Content-Type");
header("Access-Control-Allow-Methods: POST, OPTIONS");
header("Content-Type: application/json");

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit;
}

require_once(__DIR__ . '/../config.php');

 $data = json_decode(file_get_contents("php://input"), true);

if (!isset($data['ID_USUARIO']) || empty($data['ID_USUARIO'])) {
    http_response_code(400);
    echo json_encode(["success" => false, "message" => "ID de usuario es requerido para actualizar."]);
    exit;
}

 $required_fields = ['NOMBRE_COMPLETO_USUARIO', 'CORREO_USUARIO', 'TIPO_USUARIO', 'ESTADO_USUARIO'];
foreach ($required_fields as $field) {
    if (!isset($data[$field]) || trim($data[$field]) === '') {
        http_response_code(400);
        echo json_encode(["success" => false, "message" => "Datos incompletos: el campo '$field' es requerido."]);
        exit;
    }
}

 $id = $mysqli->real_escape_string($data['ID_USUARIO']);

// --- 1. OBTENER DATOS ACTUALES ---
 $stmt_get = $mysqli->prepare("SELECT PASSWORD_USUARIO, FOTO_USUARIO FROM USUARIOS_SISTEMA WHERE ID_USUARIO = ?");
if ($stmt_get === false) {
    http_response_code(500);
    echo json_encode(["success" => false, "message" => "Error al preparar la consulta de obtención: " . $mysqli->error]);
    exit;
}
 $stmt_get->bind_param("i", $id);
 $stmt_get->execute();
 $result_get = $stmt_get->get_result();
 $current_user = $result_get->fetch_assoc();
 $stmt_get->close();

if (!$current_user) {
    http_response_code(404);
    echo json_encode(["success" => false, "message" => "Usuario no encontrado."]);
    exit;
}

// --- 2. PREPARAR NUEVOS DATOS ---

// Dividir el nombre completo
 $nombreCompleto = trim($data['NOMBRE_COMPLETO_USUARIO']);
 $partes = explode(' ', $nombreCompleto, 2);
 $nombre = $partes[0];
 $apellido = isset($partes[1]) ? $partes[1] : '';

// Manejar la contraseña: si se envía una nueva, se hashea. Si no, se mantiene la actual.
 $password_hash = $current_user['PASSWORD_USUARIO'];
if (!empty($data['PASSWORD_USUARIO'])) {
    $password_hash = password_hash($data['PASSWORD_USUARIO'], PASSWORD_DEFAULT);
}

// --- 3. MANEJO DE LA IMAGEN (CORREGIDO) ---
 $fotoPath = $current_user['FOTO_USUARIO']; // Mantener la actual por defecto

// Verificar si se ha subido una imagen nueva (viene en formato Base64)
// Hacemos la verificación y extracción en un SOLO paso para evitar el error.
if (!empty($data['FOTO_USUARIO']) && preg_match('/^data:image\/(\w+);base64,/', $data['FOTO_USUARIO'], $matches)) {
    
    $imageType = $matches[1];
    $base64Data = substr($data['FOTO_USUARIO'], strpos($data['FOTO_USUARIO'], ',') + 1);
    $decodedImage = base64_decode($base64Data);

    if ($decodedImage !== false) {
        $uploadDir = __DIR__ . '/uploads/usuarios/';
        if (!file_exists($uploadDir)) {
            mkdir($uploadDir, 0777, true);
        }
        $fileName = 'usuario_' . uniqid() . '.' . $imageType;
        $filePath = $uploadDir . $fileName;
        if (file_put_contents($filePath, $decodedImage)) {
            $fotoPath = 'uploads/usuarios/' . $fileName;
        }
    }
}

// --- 4. ACTUALIZAR EN LA BASE DE DATOS ---
 $sql = "UPDATE USUARIOS_SISTEMA SET 
            NOMBRE_USUARIO = ?, 
            APELLIDO_USUARIO = ?, 
            CORREO_USUARIO = ?, 
            PASSWORD_USUARIO = ?, 
            TIPO_USUARIO = ?, 
            ESTADO_USUARIO = ?,
            FOTO_USUARIO = ?
        WHERE ID_USUARIO = ?";

 $stmt = $mysqli->prepare($sql);
if ($stmt === false) {
    http_response_code(500);
    echo json_encode(["success" => false, "message" => "Error al preparar la consulta de actualización: " . $mysqli->error]);
    exit;
}

 $stmt->bind_param(
    "ssssissi", 
    $nombre, 
    $apellido, 
    $data['CORREO_USUARIO'], 
    $password_hash, 
    $data['TIPO_USUARIO'], 
    $data['ESTADO_USUARIO'],
    $fotoPath,
    $id
);

if ($stmt->execute()) {
    echo json_encode([
        "success" => true, 
        "message" => "Usuario actualizado exitosamente."
    ]);
} else {
    http_response_code(500);
    echo json_encode(["success" => false, "message" => "Error al ejecutar la consulta: " . $stmt->error]);
}

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