<?php
require_once __DIR__ . '/../app/helpers.php';
require_once __DIR__ . '/../app/db.php';
require_once __DIR__ . '/../app/layout.php';
require_once __DIR__ . '/../app/audit.php';
require_once __DIR__ . '/../app/Services/AccountingService.php';
require_once __DIR__ . '/../hotel/_lib.php';
require_once __DIR__ . '/../fleet/_lib.php';
require_login();

$pdo = db();
$svc = new AccountingService($pdo);
hotel_ensure_schema($pdo);
fleet_ensure_schema($pdo);
fleet_ensure_limo_schema($pdo);
fleet_ensure_rental_schema($pdo);
fleet_ensure_receipts_schema($pdo);
$cid = (int)($_SESSION['company_id'] ?? 0);
$uid = (int)($_SESSION['user_id'] ?? 0);

$from = $_GET['from'] ?? ($_GET['date'] ?? date('Y-m-d'));
$to   = $_GET['to']   ?? ($_GET['date'] ?? date('Y-m-d'));
$msg = '';
$err = '';

if ($from > $to) { [$from, $to] = [$to, $from]; }

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  csrf_check();
  $action = $_POST['action'] ?? '';
  $from = $_POST['from'] ?? $from;
  $to   = $_POST['to'] ?? $to;
  if ($from > $to) { [$from, $to] = [$to, $from]; }

  try {
    if ($action === 'post_cash_range') {
      $st = $pdo->prepare("
        SELECT ct.id
        FROM cash_transactions ct
        LEFT JOIN cash_tx_journal_map m ON m.cash_tx_id = ct.id
        WHERE ct.company_id = ?
          AND ct.tx_date BETWEEN ? AND ?
          AND m.entry_id IS NULL
        ORDER BY ct.tx_date, ct.id
      ");
      $st->execute([$cid, $from, $to]);
      $ids = $st->fetchAll(PDO::FETCH_COLUMN);

      $count = 0;
      foreach ($ids as $id) {
        $svc->postCashTx($cid, (int)$id, $uid);
        $count++;
      }
      audit_log($pdo, [
        'company_id' => $cid, 'user_id' => $uid, 'module' => 'journal', 'action' => 'POST_CASH_RANGE',
        'entity_type' => 'cash_range', 'entity_id' => $from . '->' . $to,
        'description' => audit_compose_description('ترحيل الوارد والمنصرف لفترة', ['من' => $from, 'إلى' => $to, 'عدد الحركات' => (string)$count]),
      ]);
      $msg = "تم إنشاء/ترحيل {$count} قيدًا من الوارد والمنصرف للفترة من {$from} إلى {$to}";
    }

    if ($action === 'unpost_cash_range') {
      $st = $pdo->prepare("
        SELECT ct.id
        FROM cash_transactions ct
        JOIN cash_tx_journal_map m ON m.cash_tx_id = ct.id
        WHERE ct.company_id = ?
          AND ct.tx_date BETWEEN ? AND ?
        ORDER BY ct.tx_date, ct.id
      ");
      $st->execute([$cid, $from, $to]);
      $ids = $st->fetchAll(PDO::FETCH_COLUMN);

      $count = 0;
      foreach ($ids as $id) {
        $svc->unpostCashTx($cid, (int)$id);
        $count++;
      }
      audit_log($pdo, [
        'company_id' => $cid, 'user_id' => $uid, 'module' => 'journal', 'action' => 'UNPOST_CASH_RANGE',
        'entity_type' => 'cash_range', 'entity_id' => $from . '->' . $to,
        'description' => audit_compose_description('إلغاء ترحيل الوارد والمنصرف لفترة', ['من' => $from, 'إلى' => $to, 'عدد الحركات' => (string)$count]),
      ]);
      $msg = "تم إلغاء ترحيل {$count} حركة من الوارد والمنصرف (تم حذف القيود) للفترة من {$from} إلى {$to}";
    }

    if ($action === 'post_fe_range') {
      $st = $pdo->prepare("
        SELECT DISTINCT event_date
        FROM financial_events
        WHERE company_id = ?
          AND event_date BETWEEN ? AND ?
          AND status = 'DRAFT'
        ORDER BY event_date
      ");
      $st->execute([$cid, $from, $to]);
      $days = $st->fetchAll(PDO::FETCH_COLUMN);

      $count = 0;
      foreach ($days as $day) {
        $res = $svc->postFinancialEventsForDay($cid, (string)$day, $uid);
        $count += (int)($res['posted'] ?? 0);
      }
      audit_log($pdo, [
        'company_id' => $cid, 'user_id' => $uid, 'module' => 'journal', 'action' => 'POST_FINANCIAL_EVENTS_RANGE',
        'entity_type' => 'financial_event_range', 'entity_id' => $from . '->' . $to,
        'description' => audit_compose_description('ترحيل الفواتير والتحصيل لفترة', ['من' => $from, 'إلى' => $to, 'عدد القيود' => (string)$count]),
      ]);
      $msg = "تم إنشاء/ترحيل {$count} قيدًا من الفواتير/التحصيل للفترة من {$from} إلى {$to}";
    }

    if ($action === 'post_hotel_booking_range') {
      $st = $pdo->prepare("SELECT id FROM hotel_bookings WHERE company_id=? AND request_date BETWEEN ? AND ? AND posted_entry_id IS NULL AND status IN ('CONFIRMED','CHECKED_IN','CHECKED_OUT') ORDER BY request_date, id");
      $st->execute([$cid, $from, $to]);
      $ids = $st->fetchAll(PDO::FETCH_COLUMN);
      $count = 0;
      foreach ($ids as $id) {
        hotel_create_booking_journal($pdo, $cid, (int)$id, $uid);
        $count++;
      }
      $msg = "تم إنشاء/ترحيل {$count} قيدًا من حجوزات الفنادق للفترة من {$from} إلى {$to}";
    }

    if ($action === 'undo_hotel_booking_range') {
      $st = $pdo->prepare("SELECT id FROM hotel_bookings WHERE company_id=? AND request_date BETWEEN ? AND ? AND posted_entry_id IS NOT NULL ORDER BY request_date, id");
      $st->execute([$cid, $from, $to]);
      $ids = $st->fetchAll(PDO::FETCH_COLUMN);
      $count = 0;
      foreach ($ids as $id) {
        hotel_unpost_booking_journal($pdo, $cid, (int)$id);
        $count++;
      }
      $msg = "تم إلغاء ترحيل {$count} قيدًا من حجوزات الفنادق للفترة من {$from} إلى {$to}";
    }

    if ($action === 'post_hotel_receipt_range') {
      $st = $pdo->prepare("SELECT id FROM hotel_receipts WHERE company_id=? AND receipt_date BETWEEN ? AND ? AND posted_entry_id IS NULL ORDER BY receipt_date, id");
      $st->execute([$cid, $from, $to]);
      $ids = $st->fetchAll(PDO::FETCH_COLUMN);
      $count = 0;
      foreach ($ids as $id) {
        hotel_create_receipt_journal($pdo, $cid, (int)$id, $uid);
        $count++;
      }
      $msg = "تم إنشاء/ترحيل {$count} قيدًا من تحصيلات حجوزات الفنادق للفترة من {$from} إلى {$to}";
    }

    if ($action === 'undo_hotel_receipt_range') {
      $st = $pdo->prepare("SELECT id FROM hotel_receipts WHERE company_id=? AND receipt_date BETWEEN ? AND ? AND posted_entry_id IS NOT NULL ORDER BY receipt_date, id");
      $st->execute([$cid, $from, $to]);
      $ids = $st->fetchAll(PDO::FETCH_COLUMN);
      $count = 0;
      foreach ($ids as $id) {
        hotel_unpost_receipt_journal($pdo, $cid, (int)$id);
        $count++;
      }
      $msg = "تم إلغاء ترحيل {$count} قيدًا من تحصيلات حجوزات الفنادق للفترة من {$from} إلى {$to}";
    }

    if ($action === 'post_vehicle_daily_range') {
      $st = $pdo->prepare("SELECT id FROM vehicle_receipts WHERE company_id=? AND receipt_date BETWEEN ? AND ? AND posted_entry_id IS NULL ORDER BY receipt_date, id");
      $st->execute([$cid, $from, $to]);
      $ids = $st->fetchAll(PDO::FETCH_COLUMN);
      $count = 0;
      foreach ($ids as $id) {
        fleet_create_receipt_journal($pdo, $cid, (int)$id, $uid);
        $count++;
      }
      $msg = "تم إنشاء/ترحيل {$count} قيدًا من تحصيلات السيارات للفترة من {$from} إلى {$to}";
    }

    if ($action === 'undo_vehicle_daily_range') {
      $st = $pdo->prepare("SELECT id FROM vehicle_receipts WHERE company_id=? AND receipt_date BETWEEN ? AND ? AND posted_entry_id IS NOT NULL ORDER BY receipt_date, id");
      $st->execute([$cid, $from, $to]);
      $ids = $st->fetchAll(PDO::FETCH_COLUMN);
      $count = 0;
      foreach ($ids as $id) {
        fleet_unpost_receipt_journal($pdo, $cid, (int)$id);
        $count++;
      }
      $msg = "تم إلغاء ترحيل {$count} قيدًا من تحصيلات السيارات للفترة من {$from} إلى {$to}";
    }

    if ($action === 'undo_fe_range') {
      $st = $pdo->prepare("
        SELECT DISTINCT event_date
        FROM financial_events
        WHERE company_id = ?
          AND event_date BETWEEN ? AND ?
          AND status = 'POSTED'
        ORDER BY event_date
      ");
      $st->execute([$cid, $from, $to]);
      $days = $st->fetchAll(PDO::FETCH_COLUMN);

      $count = 0;
      foreach ($days as $day) {
        $res = $svc->undoFinancialEventsForDay($cid, (string)$day);
        $count += (int)($res['undone'] ?? 0);
      }
      audit_log($pdo, [
        'company_id' => $cid, 'user_id' => $uid, 'module' => 'journal', 'action' => 'UNPOST_FINANCIAL_EVENTS_RANGE',
        'entity_type' => 'financial_event_range', 'entity_id' => $from . '->' . $to,
        'description' => audit_compose_description('إلغاء ترحيل الفواتير والتحصيل لفترة', ['من' => $from, 'إلى' => $to, 'عدد القيود' => (string)$count]),
      ]);
      $msg = "تم إلغاء ترحيل {$count} قيدًا من الفواتير/التحصيل (حذفها) للفترة من {$from} إلى {$to}";
    }
  } catch (Throwable $e) {
    $err = $e->getMessage();
  }
}

if ($from > $to) { [$from, $to] = [$to, $from]; }

$st = $pdo->prepare("
  SELECT
    SUM(CASE WHEN m.entry_id IS NULL THEN 1 ELSE 0 END) AS draft_count,
    IFNULL(SUM(CASE WHEN m.entry_id IS NULL THEN ct.amount ELSE 0 END),0) AS draft_amount,
    SUM(CASE WHEN m.entry_id IS NOT NULL THEN 1 ELSE 0 END) AS posted_count,
    IFNULL(SUM(CASE WHEN m.entry_id IS NOT NULL THEN ct.amount ELSE 0 END),0) AS posted_amount
  FROM cash_transactions ct
  LEFT JOIN cash_tx_journal_map m ON m.cash_tx_id = ct.id
  WHERE ct.company_id = ?
    AND ct.tx_date BETWEEN ? AND ?
");
$st->execute([$cid, $from, $to]);
$row = $st->fetch(PDO::FETCH_ASSOC) ?: [];
$cashDraftCount = (int)($row['draft_count'] ?? 0);
$cashDraftAmount = (float)($row['draft_amount'] ?? 0);
$cashPostedCount = (int)($row['posted_count'] ?? 0);
$cashPostedAmount = (float)($row['posted_amount'] ?? 0);

$st = $pdo->prepare("SELECT COUNT(*) FROM financial_events WHERE company_id=? AND event_date BETWEEN ? AND ? AND status='DRAFT'");
$st->execute([$cid, $from, $to]);
$feDraftCount = (int)$st->fetchColumn();


$st = $pdo->prepare("SELECT COUNT(*) FROM hotel_bookings WHERE company_id=? AND request_date BETWEEN ? AND ? AND posted_entry_id IS NULL AND status IN ('CONFIRMED','CHECKED_IN','CHECKED_OUT')");
$st->execute([$cid, $from, $to]);
$hbDraftCount = (int)$st->fetchColumn();

$st = $pdo->prepare("SELECT COUNT(*) FROM hotel_bookings WHERE company_id=? AND request_date BETWEEN ? AND ? AND posted_entry_id IS NOT NULL");
$st->execute([$cid, $from, $to]);
$hbPostedCount = (int)$st->fetchColumn();

$st = $pdo->prepare("SELECT COUNT(*) FROM hotel_receipts WHERE company_id=? AND receipt_date BETWEEN ? AND ? AND posted_entry_id IS NULL");
$st->execute([$cid, $from, $to]);
$hrDraftCount = (int)$st->fetchColumn();

$st = $pdo->prepare("SELECT COUNT(*) FROM hotel_receipts WHERE company_id=? AND receipt_date BETWEEN ? AND ? AND posted_entry_id IS NOT NULL");
$st->execute([$cid, $from, $to]);
$hrPostedCount = (int)$st->fetchColumn();

$st = $pdo->prepare("SELECT COUNT(*) FROM financial_events WHERE company_id=? AND event_date BETWEEN ? AND ? AND status='POSTED'");
$st->execute([$cid, $from, $to]);
$fePostedCount = (int)$st->fetchColumn();


$st = $pdo->prepare("SELECT COUNT(*) FROM vehicle_receipts WHERE company_id=? AND receipt_date BETWEEN ? AND ? AND posted_entry_id IS NULL");
$st->execute([$cid, $from, $to]);
$vdDraftCount = (int)$st->fetchColumn();

$st = $pdo->prepare("SELECT COUNT(*) FROM vehicle_receipts WHERE company_id=? AND receipt_date BETWEEN ? AND ? AND posted_entry_id IS NOT NULL");
$st->execute([$cid, $from, $to]);
$vdPostedCount = (int)$st->fetchColumn();

$cashRowsStmt = $pdo->prepare("
  SELECT ct.*,
         a1.code AS cash_code, a1.name AS cash_name,
         a2.code AS cnt_code, a2.name AS cnt_name,
         m.entry_id
  FROM cash_transactions ct
  LEFT JOIN accounts a1 ON a1.id = ct.cash_account_id
  LEFT JOIN accounts a2 ON a2.id = ct.counter_account_id
  LEFT JOIN cash_tx_journal_map m ON m.cash_tx_id = ct.id
  WHERE ct.company_id = ?
    AND ct.tx_date BETWEEN ? AND ?
  ORDER BY ct.tx_date DESC, ct.id DESC
  LIMIT 300
");
$cashRowsStmt->execute([$cid, $from, $to]);
$cashRows = $cashRowsStmt->fetchAll(PDO::FETCH_ASSOC);

$feRowsStmt = $pdo->prepare("
  SELECT fe.*, je.ref
  FROM financial_events fe
  LEFT JOIN journal_entries je ON je.id = fe.entry_id
  WHERE fe.company_id = ?
    AND fe.event_date BETWEEN ? AND ?
  ORDER BY fe.event_date DESC, fe.id DESC
  LIMIT 300
");
$feRowsStmt->execute([$cid, $from, $to]);
$feRows = $feRowsStmt->fetchAll(PDO::FETCH_ASSOC);

$previewCash = [];
foreach ($cashRows as $r) {
  if (!empty($r['entry_id'])) continue;
  $amt = (float)$r['amount'];
  $cashName = trim(($r['cash_code'] ?? '') . ' - ' . ($r['cash_name'] ?? ''));
  $cntName  = trim(($r['cnt_code'] ?? '') . ' - ' . ($r['cnt_name'] ?? ''));
  if (($r['tx_type'] ?? '') === 'IN') {
    $previewCash[] = ['date'=>$r['tx_date'], 'ref'=>'CASH-'.$r['id'], 'memo'=>$r['memo'] ?: 'حركة وارد', 'account'=>$cashName, 'debit'=>$amt, 'credit'=>0];
    $previewCash[] = ['date'=>$r['tx_date'], 'ref'=>'CASH-'.$r['id'], 'memo'=>$r['memo'] ?: 'حركة وارد', 'account'=>$cntName, 'debit'=>0, 'credit'=>$amt];
  } else {
    $previewCash[] = ['date'=>$r['tx_date'], 'ref'=>'CASH-'.$r['id'], 'memo'=>$r['memo'] ?: 'حركة منصرف', 'account'=>$cntName, 'debit'=>$amt, 'credit'=>0];
    $previewCash[] = ['date'=>$r['tx_date'], 'ref'=>'CASH-'.$r['id'], 'memo'=>$r['memo'] ?: 'حركة منصرف', 'account'=>$cashName, 'debit'=>0, 'credit'=>$amt];
  }
}

$previewEventsStmt = $pdo->prepare("
  SELECT fe.id, fe.event_date, fe.event_type, fe.memo, fel.debit, fel.credit, a.code, a.name
  FROM financial_events fe
  JOIN financial_event_lines fel ON fel.event_id = fe.id
  JOIN accounts a ON a.id = fel.account_id
  WHERE fe.company_id = ?
    AND fe.event_date BETWEEN ? AND ?
    AND fe.status = 'DRAFT'
  ORDER BY fe.event_date DESC, fe.id DESC, fel.id
  LIMIT 500
");
$previewEventsStmt->execute([$cid, $from, $to]);
$previewFERows = $previewEventsStmt->fetchAll(PDO::FETCH_ASSOC);

render_layout(
  'ترحيل القيود اليومية',
  '<a href="'.h(url('/index.php')).'">الرئيسية</a> <span class="mx-1">/</span> <a href="'.h(url('/accounts/index.php')).'">الحسابات</a> <span class="mx-1">/</span> <a href="'.h(url('/journal/index.php')).'">القيود اليومية</a> <span class="mx-1">/</span> <span>الترحيل</span>',
  function() use (
    $from, $to, $msg, $err,
    $cashDraftCount, $cashDraftAmount, $cashPostedCount, $cashPostedAmount,
    $feDraftCount, $fePostedCount,
    $hbDraftCount, $hbPostedCount, $hrDraftCount, $hrPostedCount,
    $vdDraftCount, $vdPostedCount,
    $cashRows, $feRows, $previewCash, $previewFERows
  ) {
?>
<div class="container-fluid px-0">

  <style>
    .posting-page-top-links{
      display:flex;
      flex-wrap:wrap;
      gap:10px;
      margin-bottom:14px;
    }

    .posting-page-top-links .btn{
      border-radius:999px;
      min-height:40px;
      padding-inline:14px;
      font-weight:600;
    }

    .posting-filter-card{
      border:1px solid #e9ecef;
      border-radius:22px;
      background:#fff;
      box-shadow:0 3px 14px rgba(15,23,42,.04);
    }

    .posting-toolbar .posting-main-actions{
      display:flex;
      flex-wrap:wrap;
      gap:12px;
      margin-top:16px;
      margin-bottom:8px;
    }

    .posting-toolbar .posting-main-actions .btn{
      min-width:240px;
      min-height:46px;
      border-radius:999px;
      font-weight:700;
      padding-inline:18px;
    }

    .posting-toolbar .posting-group{
      border:1px solid #e9ecef;
      border-radius:18px;
      padding:14px;
      background:#fff;
      box-shadow:0 2px 10px rgba(15,23,42,.04);
      height:100%;
    }

    .posting-toolbar .posting-group-title{
      font-weight:700;
      font-size:15px;
      color:#0f172a;
      margin-bottom:10px;
      display:flex;
      align-items:center;
      gap:8px;
    }

    .posting-toolbar .posting-actions{
      display:flex;
      flex-wrap:wrap;
      gap:10px;
    }

    .posting-toolbar .btn{
      min-height:44px;
      border-radius:999px;
      font-weight:600;
      padding-inline:16px;
      white-space:nowrap;
    }

    .posting-stats .cardx{
      border:1px solid #eef2f6;
      border-radius:22px;
      box-shadow:0 3px 14px rgba(15,23,42,.04);
    }

    .posting-table-card{
      border:1px solid #eef2f6;
      border-radius:22px;
      overflow:hidden;
      box-shadow:0 3px 14px rgba(15,23,42,.04);
    }

    .posting-table-card .card-head{
      padding:16px 18px 8px;
    }

    .posting-table-card .table{
      margin-bottom:0;
    }

    .posting-table-card .table thead th{
      white-space:nowrap;
      font-size:13px;
    }

    @media (max-width: 768px){
      .posting-toolbar .posting-actions,
      .posting-toolbar .posting-main-actions{
        flex-direction:column;
      }

      .posting-toolbar .posting-actions .btn,
      .posting-toolbar .posting-main-actions .btn,
      .posting-page-top-links .btn{
        width:100%;
        min-width:auto;
      }
    }
  </style>

  <div class="posting-page-top-links">
    <a class="btn btn-light border btn-sm" href="<?= url('/fleet/vehicle_accounts.php') ?>">
      <i class="bi bi-cash-stack"></i> حسابات السيارات
    </a>
    <a class="btn btn-light border btn-sm" href="<?= url('/cash/index.php') ?>">
      <i class="bi bi-wallet2"></i> الوارد والمنصرف
    </a>
    <a class="btn btn-light border btn-sm" href="<?= url('/journal/index.php') ?>">
      <i class="bi bi-journal-text"></i> القيود اليومية
    </a>
  </div>

  <?php if($msg): ?>
    <div class="alert alert-success mt-3"><?= h($msg) ?></div>
  <?php endif; ?>

  <?php if($err): ?>
    <div class="alert alert-danger mt-3"><?= h($err) ?></div>
  <?php endif; ?>

  <div class="posting-filter-card p-3 mt-3">
    <form method="get" class="row g-3 align-items-end">
      <div class="col-12 col-md-3">
        <label class="form-label">من تاريخ</label>
        <?= render_date_input('from', $from) ?>
      </div>
      <div class="col-12 col-md-3">
        <label class="form-label">إلى تاريخ</label>
        <?= render_date_input('to', $to) ?>
      </div>
      <div class="col-12 col-md-2">
        <button class="btn btn-outline-dark w-100 rounded-pill">
          <i class="bi bi-eye"></i> معاينة
        </button>
      </div>
      <div class="col-12 col-md-4 text-secondary small">
        تعرض الصفحة كل الحركات والأحداث في الفترة المختارة، مع إمكانية الترحيل أو حذف القيود المرحلة.
      </div>
    </form>

    <div class="posting-toolbar mt-3">

      <div class="posting-main-actions">
        <form method="post" class="d-inline">
          <?= csrf_field() ?>
          <input type="hidden" name="from" value="<?= h($from) ?>">
          <input type="hidden" name="to" value="<?= h($to) ?>">
          <input type="hidden" name="action" value="post_cash_range">
          <button class="btn btn-dark" onclick="return confirm('تأكيد إنشاء/ترحيل قيود الوارد والمنصرف للفترة المحددة؟');">
            <i class="bi bi-check2-circle"></i> إنشاء/ترحيل قيود الوارد والمنصرف
          </button>
        </form>

        <form method="post" class="d-inline">
          <?= csrf_field() ?>
          <input type="hidden" name="from" value="<?= h($from) ?>">
          <input type="hidden" name="to" value="<?= h($to) ?>">
          <input type="hidden" name="action" value="post_fe_range">
          <button class="btn btn-outline-dark" onclick="return confirm('تأكيد إنشاء/ترحيل قيود الفواتير والتحصيل للفترة المحددة؟');">
            <i class="bi bi-receipt"></i> إنشاء/ترحيل قيود الفواتير والتحصيل
          </button>
        </form>
      </div>

      <div class="row g-3 mt-1">
        <div class="col-12 col-xl-6">
          <div class="posting-group">
            <div class="posting-group-title">
              <i class="bi bi-wallet2"></i>
              الوارد والمنصرف والفواتير
            </div>
            <div class="posting-actions">
              <form method="post" class="d-inline">
                <?= csrf_field() ?>
                <input type="hidden" name="from" value="<?= h($from) ?>">
                <input type="hidden" name="to" value="<?= h($to) ?>">
                <input type="hidden" name="action" value="unpost_cash_range">
                <button class="btn btn-outline-danger" onclick="return confirm('سيتم حذف قيود الوارد والمنصرف المرحلة للفترة المحددة. متابعة؟');">
                  <i class="bi bi-x-circle"></i> إلغاء ترحيل الوارد والمنصرف
                </button>
              </form>

              <form method="post" class="d-inline">
                <?= csrf_field() ?>
                <input type="hidden" name="from" value="<?= h($from) ?>">
                <input type="hidden" name="to" value="<?= h($to) ?>">
                <input type="hidden" name="action" value="undo_fe_range">
                <button class="btn btn-danger" onclick="return confirm('سيتم حذف قيود الفواتير والتحصيل المرحلة للفترة المحددة. متابعة؟');">
                  <i class="bi bi-x-circle-fill"></i> إلغاء ترحيل الفواتير والتحصيل
                </button>
              </form>
            </div>
          </div>
        </div>

        <div class="col-12 col-xl-6">
          <div class="posting-group">
            <div class="posting-group-title">
              <i class="bi bi-car-front"></i>
              إيراد السيارات
            </div>
            <div class="posting-actions">
              <form method="post" class="d-inline">
                <?= csrf_field() ?>
                <input type="hidden" name="from" value="<?= h($from) ?>">
                <input type="hidden" name="to" value="<?= h($to) ?>">
                <input type="hidden" name="action" value="post_vehicle_daily_range">
                <button class="btn btn-outline-primary" onclick="return confirm('تأكيد إنشاء/ترحيل قيود إيراد السيارات اليومي للفترة المحددة؟');">
                  <i class="bi bi-car-front"></i> ترحيل إيراد السيارات اليومي
                </button>
              </form>

              <form method="post" class="d-inline">
                <?= csrf_field() ?>
                <input type="hidden" name="from" value="<?= h($from) ?>">
                <input type="hidden" name="to" value="<?= h($to) ?>">
                <input type="hidden" name="action" value="undo_vehicle_daily_range">
                <button class="btn btn-outline-danger" onclick="return confirm('سيتم حذف قيود إيراد السيارات اليومية المرحلة للفترة المحددة. متابعة؟');">
                  <i class="bi bi-x-octagon"></i> إلغاء ترحيل إيراد السيارات
                </button>
              </form>
            </div>
          </div>
        </div>

        <div class="col-12">
          <div class="posting-group">
            <div class="posting-group-title">
              <i class="bi bi-building"></i>
              الفنادق
            </div>
            <div class="posting-actions">
              <form method="post" class="d-inline">
                <?= csrf_field() ?>
                <input type="hidden" name="from" value="<?= h($from) ?>">
                <input type="hidden" name="to" value="<?= h($to) ?>">
                <input type="hidden" name="action" value="post_hotel_booking_range">
                <button class="btn btn-outline-primary" onclick="return confirm('تأكيد ترحيل حجوزات الفنادق المؤكدة للفترة المحددة؟');">
                  <i class="bi bi-building-check"></i> ترحيل حجوزات الفنادق
                </button>
              </form>

              <form method="post" class="d-inline">
                <?= csrf_field() ?>
                <input type="hidden" name="from" value="<?= h($from) ?>">
                <input type="hidden" name="to" value="<?= h($to) ?>">
                <input type="hidden" name="action" value="undo_hotel_booking_range">
                <button class="btn btn-outline-danger" onclick="return confirm('سيتم حذف قيود حجوزات الفنادق المرحلة للفترة المحددة. متابعة؟');">
                  <i class="bi bi-building-x"></i> إلغاء ترحيل الحجوزات
                </button>
              </form>

              <form method="post" class="d-inline">
                <?= csrf_field() ?>
                <input type="hidden" name="from" value="<?= h($from) ?>">
                <input type="hidden" name="to" value="<?= h($to) ?>">
                <input type="hidden" name="action" value="post_hotel_receipt_range">
                <button class="btn btn-outline-success" onclick="return confirm('تأكيد ترحيل تحصيلات حجوزات الفنادق للفترة المحددة؟');">
                  <i class="bi bi-cash-stack"></i> ترحيل تحصيلات الفنادق
                </button>
              </form>

              <form method="post" class="d-inline">
                <?= csrf_field() ?>
                <input type="hidden" name="from" value="<?= h($from) ?>">
                <input type="hidden" name="to" value="<?= h($to) ?>">
                <input type="hidden" name="action" value="undo_hotel_receipt_range">
                <button class="btn btn-outline-warning" onclick="return confirm('سيتم حذف قيود تحصيلات الفنادق المرحلة للفترة المحددة. متابعة؟');">
                  <i class="bi bi-arrow-counterclockwise"></i> إلغاء ترحيل تحصيلات الفنادق
                </button>
              </form>
            </div>
          </div>
        </div>
      </div>

    </div>
  </div>

  <div class="row g-3 mt-2 posting-stats">
    <div class="col-12 col-md-6 col-xl-3">
      <div class="card cardx p-3 h-100">
        <div class="text-secondary small">وارد/منصرف غير مرحّل</div>
        <div class="fs-3 fw-bold mt-1"><?= (int)$cashDraftCount ?></div>
        <div class="small text-secondary mt-1"><?= nf($cashDraftAmount) ?></div>
      </div>
    </div>

    <div class="col-12 col-md-6 col-xl-3">
      <div class="card cardx p-3 h-100">
        <div class="text-secondary small">تحصيلات سيارات غير مرحلة</div>
        <div class="fs-3 fw-bold mt-1"><?= (int)$vdDraftCount ?></div>
        <div class="small text-secondary mt-1">جاهزة للترحيل</div>
      </div>
    </div>

    <div class="col-12 col-md-6 col-xl-3">
      <div class="card cardx p-3 h-100">
        <div class="text-secondary small">حجوزات فنادق غير مرحلة</div>
        <div class="fs-3 fw-bold mt-1"><?= (int)$hbDraftCount ?></div>
        <div class="small text-secondary mt-1">مؤكدة وجاهزة</div>
      </div>
    </div>

    <div class="col-12 col-md-6 col-xl-3">
      <div class="card cardx p-3 h-100">
        <div class="text-secondary small">تحصيلات فنادق غير مرحلة</div>
        <div class="fs-3 fw-bold mt-1"><?= (int)$hrDraftCount ?></div>
        <div class="small text-secondary mt-1">جاهزة للترحيل</div>
      </div>
    </div>

    <div class="col-12 col-md-6 col-xl-3">
      <div class="card cardx p-3 h-100">
        <div class="text-secondary small">وارد/منصرف مرحّل</div>
        <div class="fs-3 fw-bold mt-1"><?= (int)$cashPostedCount ?></div>
        <div class="small text-secondary mt-1"><?= nf($cashPostedAmount) ?></div>
      </div>
    </div>

    <div class="col-12 col-md-6 col-xl-3">
      <div class="card cardx p-3 h-100">
        <div class="text-secondary small">تحصيلات سيارات مرحلة</div>
        <div class="fs-3 fw-bold mt-1"><?= (int)$vdPostedCount ?></div>
        <div class="small text-secondary mt-1">تم ترحيلها</div>
      </div>
    </div>

    <div class="col-12 col-md-6 col-xl-3">
      <div class="card cardx p-3 h-100">
        <div class="text-secondary small">حجوزات فنادق مرحلة</div>
        <div class="fs-3 fw-bold mt-1"><?= (int)$hbPostedCount ?></div>
        <div class="small text-secondary mt-1">تم ترحيلها</div>
      </div>
    </div>

    <div class="col-12 col-md-6 col-xl-3">
      <div class="card cardx p-3 h-100">
        <div class="text-secondary small">تحصيلات فنادق مرحلة</div>
        <div class="fs-3 fw-bold mt-1"><?= (int)$hrPostedCount ?></div>
        <div class="small text-secondary mt-1">تم ترحيلها</div>
      </div>
    </div>

    <div class="col-12 col-md-6 col-xl-3">
      <div class="card cardx p-3 h-100">
        <div class="text-secondary small">فواتير/تحصيل مرحّل</div>
        <div class="fs-3 fw-bold mt-1"><?= (int)$fePostedCount ?></div>
        <div class="small text-secondary mt-1">قيود مرحلة</div>
      </div>
    </div>
  </div>

  <div class="row g-3 mt-2">
    <div class="col-12 col-xl-6">
      <div class="posting-table-card bg-white">
        <div class="card-head">
          <div class="fw-bold">معاينة قيود الوارد والمنصرف قبل الترحيل</div>
          <div class="text-secondary small">هذه القيود المقترحة ستظهر في اليومية عند الترحيل.</div>
        </div>
        <div class="table-responsive px-3 pb-3">
          <table class="table align-middle">
            <thead>
              <tr class="text-secondary small">
                <th>التاريخ</th>
                <th>المرجع</th>
                <th>البيان</th>
                <th>الحساب</th>
                <th class="text-end">مدين</th>
                <th class="text-end">دائن</th>
              </tr>
            </thead>
            <tbody>
              <?php if(!$previewCash): ?>
                <tr>
                  <td colspan="6" class="text-center text-secondary py-4">لا توجد قيود Draft من الوارد والمنصرف في الفترة المختارة.</td>
                </tr>
              <?php endif; ?>

              <?php foreach($previewCash as $r): ?>
                <tr>
                  <td class="text-secondary"><?= h($r['date']) ?></td>
                  <td class="fw-semibold"><?= h($r['ref']) ?></td>
                  <td><?= h($r['memo']) ?></td>
                  <td class="text-secondary"><?= h($r['account']) ?></td>
                  <td class="text-end"><?= $r['debit'] ? nf($r['debit']) : '' ?></td>
                  <td class="text-end"><?= $r['credit'] ? nf($r['credit']) : '' ?></td>
                </tr>
              <?php endforeach; ?>
            </tbody>
          </table>
        </div>
      </div>
    </div>
  </div>

  <div class="row g-3 mt-2">
    <div class="col-12 col-xl-6">
      <div class="posting-table-card bg-white">
        <div class="card-head">
          <div class="fw-bold">إدارة حركات الوارد والمنصرف</div>
          <div class="text-secondary small">تعديلها/حذفها من صفحة الوارد والمنصرف قبل الترحيل أو بعد إلغاء الترحيل.</div>
        </div>
        <div class="table-responsive px-3 pb-3">
          <table class="table align-middle">
            <thead>
              <tr class="text-secondary small">
                <th>#</th>
                <th>التاريخ</th>
                <th>النوع</th>
                <th>الخزنة</th>
                <th>المقابل</th>
                <th class="text-end">المبلغ</th>
                <th>الحالة</th>
              </tr>
            </thead>
            <tbody>
              <?php if(!$cashRows): ?>
                <tr>
                  <td colspan="7" class="text-center text-secondary py-4">لا توجد حركات في الفترة.</td>
                </tr>
              <?php endif; ?>

              <?php foreach($cashRows as $r): ?>
                <tr>
                  <td class="text-secondary"><?= (int)$r['id'] ?></td>
                  <td class="text-secondary"><?= h($r['tx_date']) ?></td>
                  <td><?= ($r['tx_type'] ?? '') === 'IN' ? 'وارد' : 'منصرف' ?></td>
                  <td class="text-secondary"><?= h(trim(($r['cash_code'] ?? '').' - '.($r['cash_name'] ?? ''))) ?></td>
                  <td class="text-secondary"><?= h(trim(($r['cnt_code'] ?? '').' - '.($r['cnt_name'] ?? ''))) ?></td>
                  <td class="text-end fw-semibold"><?= nf($r['amount']) ?></td>
                  <td>
                    <?php if(!empty($r['entry_id'])): ?>
                      <span class="badge bg-success-subtle text-success border border-success-subtle">مرحّل</span>
                    <?php else: ?>
                      <span class="badge bg-warning-subtle text-warning border border-warning-subtle">Draft</span>
                    <?php endif; ?>
                  </td>
                </tr>
              <?php endforeach; ?>
            </tbody>
          </table>
        </div>
      </div>
    </div>
  </div>

</div>
<?php
});
?>