<?php
/**
 * API: Actualizar el lugar_compra_id (proveedor vinculado) para un emisor/proveedor en una fecha dada.
 * POST JSON: { proveedor_nombre, fecha, lugar_compra_id, nuevo_lugar_nombre }
 */
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');

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

require_once __DIR__ . '/../config/db.php';

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

    if (!$input || empty($input['proveedor_nombre']) || empty($input['fecha']) || !isset($input['lugar_compra_id'])) {
        throw new Exception('Faltan datos obligatorios (proveedor_nombre, fecha, lugar_compra_id)');
    }

    $proveedor = trim($input['proveedor_nombre']);
    $fecha = trim($input['fecha']);
    $lugarIdRaw = $input['lugar_compra_id'];

    if (!preg_match('/^\d{4}-\d{2}-\d{2}$/', $fecha)) {
        throw new Exception('Formato de fecha inválido. Debe ser YYYY-MM-DD');
    }

    $pdo = getConnection();
    $pdo->beginTransaction();

    $finalLugarId = null;

    if ($lugarIdRaw === 'NEW') {
        if (empty($input['nuevo_lugar_nombre'])) {
            throw new Exception('El nombre para el nuevo lugar de compra es obligatorio');
        }
        $nuevoNombre = trim($input['nuevo_lugar_nombre']);

        // Verificar si ya existe
        $stmtCheck = $pdo->prepare("SELECT id FROM lugarcompra WHERE UPPER(TRIM(nombre)) = UPPER(TRIM(:nombre)) LIMIT 1");
        $stmtCheck->execute([':nombre' => $nuevoNombre]);
        $row = $stmtCheck->fetch();

        if ($row) {
            $finalLugarId = intval($row['id']);
        } else {
            // Crear
            $stmtInsert = $pdo->prepare("INSERT INTO lugarcompra (nombre) VALUES (:nombre)");
            $stmtInsert->execute([':nombre' => $nuevoNombre]);
            $finalLugarId = intval($pdo->lastInsertId());
        }
    } else {
        $finalLugarId = intval($lugarIdRaw);
        if ($finalLugarId <= 0) {
            throw new Exception('ID de lugar de compra inválido');
        }
    }

    // Actualizar todas las filas de fel_importacion_detalle para este proveedor y fecha
    $stmtUpdate = $pdo->prepare("
        UPDATE fel_importacion_detalle fd
        JOIN fel_importaciones fi ON fd.importacion_id = fi.id
        SET fd.lugar_compra_id = :lugar_id
        WHERE fd.proveedor_nombre = :proveedor
          AND DATE(fi.fecha_importacion) = :fecha
    ");

    $stmtUpdate->execute([
        ':lugar_id' => $finalLugarId,
        ':proveedor' => $proveedor,
        ':fecha' => $fecha
    ]);

    $affectedRows = $stmtUpdate->rowCount();

    $pdo->commit();

    echo json_encode([
        'success' => true,
        'message' => "Se actualizó el proveedor a ID {$finalLugarId}. Filas afectadas: {$affectedRows}",
        'lugar_compra_id' => $finalLugarId
    ]);

} catch (Exception $e) {
    if (isset($pdo) && $pdo->inTransaction()) {
        $pdo->rollBack();
    }
    http_response_code(500);
    echo json_encode(['success' => false, 'error' => $e->getMessage()]);
}
