<?php
header('Content-Type: application/json; charset=utf-8');
require_once __DIR__ . '/../config/db.php';

try {
    $pdo = getConnection();
    
    $data = json_decode(file_get_contents('php://input'), true);
    $id = intval($data['id'] ?? 0);
    $cantASeparar = floatval($data['cantidad_a_separar'] ?? 0);

    if ($id <= 0 || $cantASeparar <= 0) {
        throw new Exception('ID o cantidad inválida');
    }

    $pdo->beginTransaction();

    // 1. Obtener registro original
    $stmt = $pdo->prepare("SELECT * FROM fel_importacion_detalle WHERE id = :id");
    $stmt->execute([':id' => $id]);
    $orig = $stmt->fetch(PDO::FETCH_ASSOC);

    if (!$orig) {
        throw new Exception('Registro no encontrado');
    }

    $cantTotalOrig = floatval($orig['cantidad_total']);
    if ($cantASeparar >= $cantTotalOrig) {
        throw new Exception('No puedes separar una cantidad mayor o igual a la actual');
    }

    // 2. Calcular proporciones
    $ratio = $cantASeparar / $cantTotalOrig;
    $totalPagadoOrig = floatval($orig['total_pagado']);
    $totalPagadoNuevo = round($totalPagadoOrig * $ratio, 2);
    $cantBonifOrig = floatval($orig['cantidad_bonificada']);
    $cantBonifNueva = round($cantBonifOrig * $ratio, 2);

    // 3. Crear nuevo registro (Copia)
    $stmtInsert = $pdo->prepare("
        INSERT INTO fel_importacion_detalle 
            (importacion_id, lugar_compra_id, proveedor_nombre, numero_autorizacion, descripcion, 
             cantidad_total, cantidad_bonificada, costo_real_unitario, precio_original, 
             total_pagado, tiene_bonificacion, consolidado, es_exento, fecha_factura)
        VALUES 
            (:imp_id, :lugar_id, :prov, :num_fac, :desc, 
             :cant, :cant_bonif, :costo, :p_orig, 
             :total, :tiene_bonif, :consolidado, :es_exento, :fecha)
    ");
    
    $stmtInsert->execute([
        ':imp_id'       => $orig['importacion_id'],
        ':lugar_id'     => $orig['lugar_compra_id'],
        ':prov'         => $orig['proveedor_nombre'],
        ':num_fac'      => $orig['numero_autorizacion'],
        ':desc'         => $orig['descripcion'],
        ':cant'         => $cantASeparar,
        ':cant_bonif'   => $cantBonifNueva,
        ':costo'        => $orig['costo_real_unitario'],
        ':p_orig'       => $orig['precio_original'],
        ':total'        => $totalPagadoNuevo,
        ':tiene_bonif'  => ($cantBonifNueva > 0 ? 1 : 0),
        ':consolidado'  => $orig['consolidado'],
        ':es_exento'    => $orig['es_exento'],
        ':fecha'        => $orig['fecha_factura']
    ]);

    // 4. Actualizar original
    $stmtUpdate = $pdo->prepare("
        UPDATE fel_importacion_detalle 
        SET cantidad_total = :cant,
            cantidad_bonificada = :cant_bonif,
            total_pagado = :total,
            tiene_bonificacion = :tiene_bonif
        WHERE id = :id
    ");
    $stmtUpdate->execute([
        ':cant'       => $cantTotalOrig - $cantASeparar,
        ':cant_bonif' => $cantBonifOrig - $cantBonifNueva,
        ':total'      => $totalPagadoOrig - $totalPagadoNuevo,
        ':tiene_bonif' => (($cantBonifOrig - $cantBonifNueva) > 0 ? 1 : 0),
        ':id'         => $id
    ]);

    $pdo->commit();
    echo json_encode(['success' => true]);

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