<?php
// addresses/update.php — Actualiza una dirección de envío del distribuidor autenticado
declare(strict_types=1);
require_once dirname(__FILE__) . '/../config.php';

if ($_SERVER['REQUEST_METHOD'] !== 'POST') { jsonErr(405, 'Metodo no permitido.'); }

$jwt   = auth();
$idinv = (int)$jwt['idinv'];
$b     = body();
$db    = getDB();

$id = (int)($b['id'] ?? 0);
if (!$id) { jsonErr(400, 'Se requiere el campo id.'); }

// Verificar que la dirección pertenece al distribuidor autenticado
$check = $db->prepare('SELECT id FROM direccionenvio WHERE id = ? AND id_inver = ?');
$check->execute([$id, $idinv]);
if (!$check->fetch()) { jsonErr(404, 'Dirección no encontrada.'); }

// Campos actualizables
$mapa = [
    'calle'      => 'calle',
    'noInt'      => 'noInt',
    'noExt'      => 'noExt',
    'entre1'     => 'entre1',
    'entre2'     => 'entre2',
    'referencia' => 'referencia',
    'colonia'    => 'colonia',
    'ciudad'     => 'ciudad',
    'estado'     => 'estado',
    'cp'         => 'cp',
    'pais'       => 'pais',
];

$sets   = [];
$params = [];

foreach ($mapa as $key => $col) {
    if (array_key_exists($key, $b)) {
        $sets[]   = '`' . $col . '` = ?';
        $params[] = $b[$key];
    }
}

if (empty($sets)) { jsonErr(400, 'No hay campos para actualizar.'); }

$params[] = $id;
$db->prepare('UPDATE direccionenvio SET ' . implode(', ', $sets) . ' WHERE id = ?')
   ->execute($params);

jsonOk(['mensaje' => 'Dirección actualizada correctamente.']);
