<?php
require_once __DIR__ . "/../_core.php";

cors_headers();
start_erp_session();
require_login();

$conn = db_connect();

$limit = (int)($_GET["limit"] ?? 20);
if ($limit <= 0 || $limit > 200) {
    $limit = 20;
}

function normalize_account_name($name)
{
    $name = trim((string)$name);
    $lower = mb_strtolower($name, 'UTF-8');

    $map = [
        'showroom cash'  => 'শোরুম ক্যাশ',
        'showroom নগদ'   => 'শোরুম ক্যাশ',
        'শোরুম নগদ'      => 'শোরুম ক্যাশ',
        'শোরুম cash'     => 'শোরুম ক্যাশ',
        'factory cash'   => 'ফ্যাক্টরি ক্যাশ',
        'factory নগদ'    => 'ফ্যাক্টরি ক্যাশ',
        'ফ্যাক্টরি নগদ'  => 'ফ্যাক্টরি ক্যাশ',
        'ফ্যাক্টরি cash' => 'ফ্যাক্টরি ক্যাশ',
        'locker cash'    => 'লকার ক্যাশ',
        'locker নগদ'     => 'লকার ক্যাশ',
        'লকার নগদ'       => 'লকার ক্যাশ',
        'লকার cash'      => 'লকার ক্যাশ',
    ];

    return $map[$lower] ?? $name;
}

function normalize_note($note)
{
    $note = trim((string)$note);
    if ($note === '') return '';
    if (strcasecmp($note, 'Opening Balance') === 0) return 'ওপেনিং ব্যালেন্স';
    if (strcasecmp($note, 'Opening ব্যালেন্স') === 0) return 'ওপেনিং ব্যালেন্স';
    if (stripos($note, 'Pledge loan disbursed - ') === 0)
        return 'অঙ্গীকার ঋণ বিতরণ - ' . substr($note, strlen('Pledge loan disbursed - '));
    if (stripos($note, 'Pledge payment received - ') === 0)
        return 'অঙ্গীকার কিস্তি গ্রহণ - ' . substr($note, strlen('Pledge payment received - '));
    return $note;
}

function detect_direction($transaction_type, $amount)
{
    $transaction_type = strtoupper(trim((string)$transaction_type));
    $amount = (float)$amount;
    if ($amount < 0) return 'OUT';
    if (in_array($transaction_type, ['OUT', 'EXPENSE', 'DEBIT', 'CASH_OUT', 'WITHDRAW'], true)) return 'OUT';
    return 'IN';
}

$has_deleted_at = has_column($conn, "cash_transactions", "deleted_at");
$where_deleted  = $has_deleted_at ? "WHERE ct.deleted_at IS NULL" : "";

// ✅ FIXED: ct.note → ct.description AS note
$q = "
SELECT
  ct.id,
  ct.transaction_date,
  ct.cash_account_id,
  ct.transaction_type,
  ct.amount,
  ct.description AS note,
  ct.created_at,
  ca.account_name
FROM cash_transactions ct
LEFT JOIN cash_accounts ca ON ca.id = ct.cash_account_id
$where_deleted
ORDER BY ct.id DESC
LIMIT $limit
";

$res = mysqli_query($conn, $q);
if (!$res) {
    respond(false, "DB Error", ["error" => mysqli_error($conn)], 500);
}

$rows = [];
while ($r = mysqli_fetch_assoc($res)) {
    $direction = detect_direction($r['transaction_type'] ?? '', $r['amount'] ?? 0);
    $r['account_name']   = normalize_account_name($r['account_name'] ?? '');
    $r['note']           = normalize_note($r['note'] ?? '');
    $r['direction']      = $direction;
    $r['display_amount'] = round(abs((float)($r['amount'] ?? 0)), 2);
    $rows[] = $r;
}

respond(true, "transactions ok", [
    "count"        => count($rows),
    "transactions" => $rows
]);
