<?php
// ─── POST /api/invoices/update.php ───────────────────────────────────────
define('ROOT', dirname(__DIR__, 2));
require_once ROOT . '/core/DB.php';
require_once ROOT . '/core/Response.php';
require_once ROOT . '/core/Auth.php';

Auth::require();
$db = DB::get();

$id              = (int)   ($_POST['id']              ?? 0);
$invoice_no      = trim($_POST['invoice_no']          ?? '');
$pump_record_id  = (int)   ($_POST['pump_record_id']  ?? 0);
$pump_type       = trim($_POST['pump_type']            ?? '');
$client_name     = trim($_POST['client_name']          ?? '');
$client_address  = trim($_POST['client_address']       ?? '');
$client_phone    = trim($_POST['client_phone']         ?? '');
$client_email    = trim($_POST['client_email']         ?? '');
$invoice_date    = trim($_POST['invoice_date']         ?? '');
$due_date        = trim($_POST['due_date']             ?? '');
$notes           = trim($_POST['notes']                ?? '');
$status          = trim($_POST['status']               ?? 'DRAFT');
$drilling_meters = (float) ($_POST['drilling_meters']  ?? 0);
$drilling_price  = (float) ($_POST['drilling_price']   ?? 0);
$casing_meters   = (float) ($_POST['casing_meters']    ?? 0);
$casing_price    = (float) ($_POST['casing_price']     ?? 0);
$items           = json_decode($_POST['items'] ?? '[]', true);

if (!$id || !$invoice_no) Response::error('id and invoice_no are required.');

$db->run(
    "UPDATE invoices SET
        pump_record_id = ?, pump_type = ?,
        client_name = ?, client_address = ?, client_phone = ?, client_email = ?,
        invoice_date = ?, due_date = ?, notes = ?, status = ?,
        drilling_meters = ?, drilling_price = ?, casing_meters = ?, casing_price = ?
     WHERE record_id = ?",
    [
        $pump_record_id ?: null, $pump_type ?: null,
        $client_name, $client_address, $client_phone, $client_email,
        $invoice_date, $due_date ?: null, $notes, $status,
        $drilling_meters, $drilling_price, $casing_meters, $casing_price,
        $id,
    ]
);

// Replace line items
$db->run("DELETE FROM invoice_items WHERE invoice_no = ?", [$invoice_no]);
foreach ($items as $item) {
    $desc  = trim($item['description'] ?? '');
    $qty   = (float) ($item['quantity']   ?? 0);
    $price = (float) ($item['unit_price'] ?? 0);
    if (!$desc) continue;
    $db->run(
        "INSERT INTO invoice_items (invoice_no, description, quantity, unit_price, total)
         VALUES (?,?,?,?,?)",
        [$invoice_no, $desc, $qty, $price, $qty * $price]
    );
}

Response::ok(null, 'Invoice updated.');