<?php
session_start();
require_once 'db/config.php';

if (!isset($_SESSION['user_id'])) {
    http_response_code(403);
    echo json_encode(['error' => 'Acceso no autorizado.']);
    exit;
}

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

if (!$data || !isset($data['id']) || !isset($data['field']) || !isset($data['value'])) {
    http_response_code(400);
    echo json_encode(['error' => 'Datos incompletos.']);
    exit;
}

$pedido_id = $data['id'];
$field = $data['field'];
$value = $data['value'];

// Whitelist allowed fields for security
$allowed_fields = ['numero_operacion', 'banco', 'clave', 'fecha_recojo', 'observacion', 'descargo', 'notas', 'nota_adicional'];
if (!in_array($field, $allowed_fields)) {
    http_response_code(400);
    echo json_encode(['error' => 'Campo no permitido.']);
    exit;
}

try {
    $pdo = db();
    
    // If updating numero_operacion, check for duplicates (optional but good)
    if ($field === 'numero_operacion' && !empty($value)) {
        if (strlen($value) < 6) {
            echo json_encode(['error' => 'El número de operación debe tener al menos 6 dígitos.']);
            exit;
        }
        $stmt_check = $pdo->prepare("SELECT id FROM pedidos WHERE numero_operacion = ? AND id != ?");
        $stmt_check->execute([$value, $pedido_id]);
        if ($stmt_check->fetch()) {
            echo json_encode(['error' => 'El número de operación ya existe en otro pedido.']);
            exit;
        }
    }

    $sql = "UPDATE pedidos SET $field = ? WHERE id = ?";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([$value, $pedido_id]);

    // Fetch the updated pedido to return relevant info (like the clave if it's now visible)
    $stmt_fetch = $pdo->prepare("SELECT clave, numero_operacion, banco FROM pedidos WHERE id = ?");
    $stmt_fetch->execute([$pedido_id]);
    $updated_pedido = $stmt_fetch->fetch(PDO::FETCH_ASSOC);

    echo json_encode([
        'success' => true,
        'message' => 'Campo actualizado correctamente.',
        'pedido' => $updated_pedido
    ]);
} catch (PDOException $e) {
    http_response_code(500);
    echo json_encode(['error' => 'Error al actualizar la base de datos: ' . $e->getMessage()]);
}
?>