<?php
// ─── POST /api/invoices/create.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();

$jc_record_id    = (int)   ($_POST['jc_record_id']    ?? 0);
$jc_no           = (int)   ($_POST['jc_no']           ?? 0);
$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']         ?? date('Y-m-d'));
$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);

// Generate invoice number: INV_XXXX
$last = $db->scalar("SELECT invoice_no FROM invoices ORDER BY record_id DESC LIMIT 1");
if ($last && preg_match('/(\d+)$/', $last, $m)) {
    $next = str_pad((int)$m[1] + 1, 4, '0', STR_PAD_LEFT);
} else {
    $next = '0001';
}
$invoice_no = 'INV_' . $next;

$db->run(
    "INSERT INTO invoices
        (invoice_no, jc_no, jc_record_id, 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)
     VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
    [
        $invoice_no,
        $jc_no           ?: null,
        $jc_record_id    ?: null,
        $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,
    ]
);

$record_id = (int) $db->lastId();

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(['record_id' => $record_id, 'invoice_no' => $invoice_no], 'Invoice created.');