<?php
include 'conexion3.php';

$pago_id = intval($_POST['pago_id']);
$factura_id = intval($_POST['factura_id']);
$proveedor_id = intval($_POST['proveedor_id']);
$nota_imputacion = intval($_POST['nota_imputacion']);

if ($pago_id > 0 && $factura_id > 0) {
    // Obtener datos del pago original
    $res_pago = $conn->query("SELECT importe, fecha, caja, nota FROM pagos_facturas WHERE id = $pago_id")->fetch_assoc();
    $importe_original = floatval($res_pago['importe']);
    $nota = $conn->real_escape_string($res_pago['nota']);
    $fecha = $res_pago['fecha'];
    $caja = $res_pago['caja'];

    // Obtener saldo pendiente de la factura
    $res_factura = $conn->query("SELECT monto, pagado FROM facturas WHERE id = $factura_id")->fetch_assoc();
    $saldo_factura = $res_factura['monto'] - $res_factura['pagado'];

    if ($saldo_factura <= 0) {
        header("Location: cuenta_proveedor.php?proveedor_id=$proveedor_id");
        exit;
    }

    // Determinar cuánto imputar
    $a_imputar = min($importe_original, $saldo_factura);
    $remanente = $importe_original - $a_imputar;

    // Insertar nuevo pago imputado a la factura
    $sql1 = "INSERT INTO pagos_facturas (proveedor_id, factura_id, fecha, importe, caja, nota)
             VALUES ($proveedor_id, $factura_id, '$fecha', $a_imputar, '$caja', '$nota_imputacion (imputado manual)')";
    if (!$conn->query($sql1)) {
        die("Error al imputar pago: " . $conn->error);
    }

    // Si queda remanente, registrarlo sin factura
    if ($remanente > 0.01) {
        $sql2 = "INSERT INTO pagos_facturas (proveedor_id, fecha, importe, caja, nota)
                 VALUES ($proveedor_id, '$fecha', $remanente, '$caja', '$nota_imputacion (Remanente de imputacion manual)')";
        if (!$conn->query($sql2)) {
            die("Error al insertar remanente: " . $conn->error);
        }
    }

    // Eliminar el pago original
    $sql3 = "DELETE FROM pagos_facturas WHERE id = $pago_id";
    if (!$conn->query($sql3)) {
        die("Error al eliminar el pago original: " . $conn->error);
    }

    // Recalcular el total pagado de la factura
    $sql4 = "UPDATE facturas
             SET pagado = (SELECT IFNULL(SUM(importe), 0) FROM pagos_facturas WHERE factura_id = $factura_id)
             WHERE id = $factura_id";
    if (!$conn->query($sql4)) {
        die("Error al actualizar monto pagado: " . $conn->error);
    }
}

header("Location: cuenta_proveedor.php?proveedor_id=$proveedor_id");
exit;
