<?php
require_once __DIR__ . '/../includes/functions.php';
require_role('admin');

$admin = current_user();
$claim_id = (int)($_GET['id'] ?? $_POST['claim_id'] ?? 0);

$stmt = $pdo->prepare("
    SELECT c.*, r.name AS row_name, r.max_amount AS row_max, u.full_name, u.personnel_code, u.id AS emp_id,
           d.full_name AS dependent_name, d.relation AS dependent_relation
    FROM claims c
    JOIN insurance_rows r ON r.id = c.row_id
    JOIN users u ON u.id = c.user_id
    LEFT JOIN dependents d ON d.id = c.dependent_id
    WHERE c.id = ?
");
$stmt->execute([$claim_id]);
$claim = $stmt->fetch();

if (!$claim) {
    $_SESSION['flash_error'] = 'درخواست یافت نشد.';
    header('Location: ' . base_url('admin/dashboard.php'));
    exit;
}

$doc_stmt = $pdo->prepare("SELECT * FROM claim_documents WHERE claim_id = ?");
$doc_stmt->execute([$claim_id]);
$documents = $doc_stmt->fetchAll();

$calc = calculate_approvable_amount($pdo, $claim['emp_id'], $claim['row_id'], $claim['amount_requested'], $claim['claim_year'], $claim['dependent_id']);

$relationLabels = ['spouse' => 'همسر', 'father' => 'پدر', 'mother' => 'مادر', 'child' => 'فرزند'];

$error = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST' && $claim['status'] === 'pending') {
    verify_csrf();
    $action = $_POST['action'] ?? '';
    $note = trim($_POST['admin_note'] ?? '');

    if ($action === 'reject') {
        $stmt2 = $pdo->prepare("UPDATE claims SET status = 'rejected', admin_note = ?, reviewed_at = NOW(), reviewed_by = ? WHERE id = ?");
        $stmt2->execute([$note, $admin['id'], $claim_id]);
        log_activity($pdo, 'reject_claim', $note, $claim_id);
        $_SESSION['flash_success'] = 'درخواست رد شد.';
        header('Location: ' . base_url('admin/dashboard.php'));
        exit;
    } elseif ($action === 'return') {
        if ($note === '') {
            $error = 'برای بازگشت جهت اصلاح، درج توضیح (مثلاً نقص مدارک) الزامی است.';
        } else {
            $stmt2 = $pdo->prepare("UPDATE claims SET status = 'needs_correction', admin_note = ?, reviewed_at = NOW(), reviewed_by = ? WHERE id = ?");
            $stmt2->execute([$note, $admin['id'], $claim_id]);
            log_activity($pdo, 'return_claim', $note, $claim_id);
            $_SESSION['flash_success'] = 'درخواست برای اصلاح به کارمند بازگشت داده شد.';
            header('Location: ' . base_url('admin/dashboard.php'));
            exit;
        }
    } elseif ($action === 'approve') {
        $approved_amount = (float)preg_replace('/[^0-9]/', '', $_POST['approved_amount'] ?? '0');
        if ($approved_amount <= 0) {
            $error = 'مبلغ تایید باید بزرگ‌تر از صفر باشد.';
        } elseif ($approved_amount > $calc['approved_amount']) {
            $error = 'مبلغ وارد شده بیشتر از سقف مجاز باقی‌مانده (' . format_amount($calc['approved_amount']) . ') است.';
        } else {
            $was_limited = $approved_amount < $claim['amount_requested'];
            $franchise_percent = $calc['franchise_percent'];
            $franchise_amount = round($approved_amount * $franchise_percent / 100);
            $after_franchise = $approved_amount - $franchise_amount;
            $dep_share = $claim['is_dependent'] ? $calc['dependent_share_percent'] : 100.0;
            $payable_amount = round($after_franchise * $dep_share / 100);

            $stmt2 = $pdo->prepare("
                UPDATE claims
                SET status = 'approved', amount_approved = ?, admin_note = ?, cap_limited = ?,
                    franchise_percent = ?, franchise_amount = ?, payable_amount = ?,
                    reviewed_at = NOW(), reviewed_by = ?
                WHERE id = ?
            ");
            $stmt2->execute([$approved_amount, $note, $was_limited ? 1 : 0, $franchise_percent, $franchise_amount, $payable_amount, $admin['id'], $claim_id]);
            log_activity($pdo, 'approve_claim', 'مبلغ تایید شده: ' . $approved_amount . ' / پرداختی: ' . $payable_amount, $claim_id);
            $_SESSION['flash_success'] = 'درخواست تایید شد. اکنون می‌توانید فرم چاپی را صادر کنید.';
            header('Location: ' . base_url('admin/print_form.php?id=' . $claim_id));
            exit;
        }
    }
}

$page_title = 'بررسی درخواست';
include __DIR__ . '/../includes/header.php';
?>

<h4 class="mb-4">بررسی درخواست #<?= fa_num($claim['id']) ?></h4>

<?php if ($error): ?><div class="alert alert-danger"><?= htmlspecialchars($error) ?></div><?php endif; ?>

<div class="row">
  <div class="col-md-7">
    <div class="card p-4 mb-3">
      <table class="table table-borderless mb-0">
        <tr><th class="w-25">کارمند</th><td><?= htmlspecialchars($claim['full_name']) ?></td></tr>
        <?php if ($claim['is_dependent']): ?>
        <tr><th>برای فرد تبعی</th><td><?= htmlspecialchars($claim['dependent_name']) ?> (<?= $relationLabels[$claim['dependent_relation']] ?? '' ?>)</td></tr>
        <?php endif; ?>
        <tr><th>ردیف درمانی</th><td><?= htmlspecialchars($claim['row_name']) ?></td></tr>
        <tr><th>مرکز درمانی</th><td><?= htmlspecialchars($claim['medical_center'] ?? '-') ?></td></tr>
        <tr><th>تاریخ انجام خدمت</th><td><?= htmlspecialchars($claim['service_date'] ?? '-') ?></td></tr>
        <tr><th>شماره فیش/فاکتور</th><td><?= htmlspecialchars($claim['receipt_number'] ?? '-') ?></td></tr>
        <tr><th>تاریخ ثبت درخواست</th><td><?= to_jalali_string($claim['created_at']) ?></td></tr>
        <tr><th>مبلغ درخواستی</th><td><?= format_amount($claim['amount_requested']) ?></td></tr>
        <tr><th>توضیحات کارمند</th><td><?= nl2br(htmlspecialchars($claim['description'] ?? '-')) ?></td></tr>
        <tr><th>وضعیت فعلی</th><td><span class="badge <?= status_badge_class($claim['status']) ?>"><?= status_label($claim['status']) ?></span></td></tr>
      </table>
    </div>

    <div class="card p-4 mb-3">
      <h6>مدارک پیوست</h6>
      <?php foreach ($documents as $d): ?>
        <a href="<?= base_url('download.php?id=' . $d['id']) ?>" target="_blank" class="d-block mb-1">📎 <?= htmlspecialchars($d['item_label'] ?: $d['original_name']) ?></a>
      <?php endforeach; ?>
      <?php if (!$documents): ?><p class="text-muted">مدرکی یافت نشد.</p><?php endif; ?>
    </div>
  </div>

  <div class="col-md-5">
    <div class="card p-4 mb-3">
      <h6>وضعیت سقف‌ها (پیش از این درخواست)</h6>
      <div class="small text-muted mb-2">مانده سقف ردیف «<?= htmlspecialchars($claim['row_name']) ?>»: <strong><?= format_amount($calc['row_remaining']) ?></strong></div>
      <?php if (!empty($calc['blocked_reason'])): ?>
        <div class="alert alert-warning small py-2 mb-2">⚠ این ردیف برای این فرد مسدود است: <?= htmlspecialchars($calc['blocked_reason']) ?></div>
      <?php endif; ?>
      <?php if ($calc['limiting_caps']): ?>
        <div class="small text-muted mb-2">این ردیف در سقف(های) ترکیبی زیر نیز محاسبه می‌شود: <?= implode('، ', $calc['limiting_caps']) ?></div>
      <?php endif; ?>
      <div class="alert alert-info mt-2 mb-0">
        حداکثر مبلغ قابل تایید با توجه به سقف‌های موجود: <strong><?= format_amount($calc['approved_amount']) ?></strong>
        <?php if ($calc['was_limited']): ?>
          <div class="text-danger small mt-1">⚠ مبلغ درخواستی از سقف بیشتر است و باید محدود شود.</div>
        <?php endif; ?>
        <hr class="my-2">
        <div class="small">فرانشیز (<?= fa_num($calc['franchise_percent']) ?>٪): <?= format_amount($calc['franchise_amount']) ?></div>
        <?php if ($claim['is_dependent']): ?>
          <div class="small">سهم پرداختی شرکت برای فرد تبعی: <?= fa_num($calc['dependent_share_percent']) ?>٪</div>
        <?php endif; ?>
        <div class="fw-bold mt-1">مبلغ نهایی قابل پرداخت (تخمینی): <?= format_amount($calc['payable_amount']) ?></div>
      </div>
    </div>

    <?php if ($claim['status'] === 'pending'): ?>
    <div class="card p-4">
      <h6 class="mb-3">تصمیم</h6>
      <form method="post">
        <?= csrf_field() ?>
        <input type="hidden" name="claim_id" value="<?= $claim['id'] ?>">

        <div class="mb-3">
          <label class="form-label">مبلغ قابل تایید (ریال)</label>
          <input type="text" name="approved_amount" class="form-control money-input" value="<?= (int)$calc['approved_amount'] ?>">
          <div class="form-text">در صورت لزوم قابل ویرایش است، اما نمی‌تواند از سقف مجاز بیشتر شود. فرانشیز و سهم فرد تبعی به‌صورت خودکار روی این مبلغ محاسبه می‌شود.</div>
        </div>

        <div class="mb-3">
          <label class="form-label">یادداشت (اختیاری)</label>
          <textarea name="admin_note" class="form-control" rows="2"></textarea>
        </div>

        <div class="d-flex gap-2">
          <button type="submit" name="action" value="approve" class="btn btn-success flex-fill">تایید درخواست</button>
          <button type="submit" name="action" value="return" class="btn btn-warning flex-fill" onclick="return confirm('این درخواست برای اصلاح به کارمند بازگردانده شود؟ توضیح بالا حتماً باید پر شده باشد.')">بازگشت برای اصلاح</button>
          <button type="submit" name="action" value="reject" class="btn btn-danger flex-fill" onclick="return confirm('آیا از رد این درخواست مطمئن هستید؟')">رد درخواست</button>
        </div>
      </form>
    </div>
    <?php else: ?>
      <div class="card p-4">
        <p class="mb-1"><strong>مبلغ تایید‌شده:</strong> <?= $claim['amount_approved'] !== null ? format_amount($claim['amount_approved']) : '-' ?></p>
        <p class="mb-1"><strong>فرانشیز:</strong> <?= format_amount($claim['franchise_amount']) ?> (<?= fa_num($claim['franchise_percent']) ?>٪)</p>
        <p class="mb-1"><strong>مبلغ نهایی قابل پرداخت:</strong> <?= $claim['payable_amount'] !== null ? format_amount($claim['payable_amount']) : '-' ?></p>
        <p class="mb-1"><strong>یادداشت:</strong> <?= htmlspecialchars($claim['admin_note'] ?? '-') ?></p>
        <?php if ($claim['status'] === 'approved' || $claim['status'] === 'paid'): ?>
          <a href="print_form.php?id=<?= $claim['id'] ?>" class="btn btn-outline-primary mt-2">مشاهده / چاپ فرم</a>
        <?php endif; ?>
      </div>
    <?php endif; ?>
  </div>
</div>

<?php include __DIR__ . '/../includes/footer.php'; ?>
