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

$user = current_user();
$rows = $pdo->query("SELECT * FROM insurance_rows WHERE is_active = 1 ORDER BY sort_order")->fetchAll();

$dependents_enabled = get_setting($pdo, 'dependents_enabled', '1') === '1';
$dependents = [];
if ($dependents_enabled) {
    $stmt = $pdo->prepare("SELECT * FROM dependents WHERE user_id = ? AND status = 'approved' ORDER BY full_name");
    $stmt->execute([$user['id']]);
    $dependents = $stmt->fetchAll();
}
$relationLabels = ['spouse' => 'همسر', 'father' => 'پدر', 'mother' => 'مادر', 'child' => 'فرزند'];

$error = '';
$selected_row_id = (int)($_POST['row_id'] ?? $_GET['row_id'] ?? 0);

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    verify_csrf();
    $row_id = (int)$_POST['row_id'];
    $amount = (float)preg_replace('/[^0-9]/', '', $_POST['amount'] ?? '0');
    $description = trim($_POST['description'] ?? '');
    $medical_center = trim($_POST['medical_center'] ?? '');
    $service_date = trim($_POST['service_date'] ?? '');
    $receipt_number = trim($_POST['receipt_number'] ?? '');
    $for_whom = $_POST['for_whom'] ?? 'self';
    $dependent_id = null;

    $row = null;
    foreach ($rows as $r) { if ($r['id'] == $row_id) { $row = $r; break; } }

    if ($dependents_enabled && $for_whom !== 'self') {
        $dependent_id = (int)$for_whom;
        $validDependent = false;
        foreach ($dependents as $d) { if ($d['id'] == $dependent_id) { $validDependent = true; break; } }
        if (!$validDependent) {
            $dependent_id = null;
            $error = 'فرد تبعی انتخاب‌شده معتبر نیست.';
        }
    }

    $requiredItems = [];
    if ($row && trim((string)$row['required_documents']) !== '') {
        $requiredItems = array_values(array_filter(array_map('trim', explode("\n", $row['required_documents']))));
    }

    if (!$error) {
        if (!$row) {
            $error = 'ردیف درمانی انتخاب شده معتبر نیست.';
        } elseif ($amount <= 0) {
            $error = 'مبلغ درخواستی را به‌درستی وارد کنید.';
        } elseif ($medical_center === '') {
            $error = 'نام مرکز درمانی الزامی است.';
        } elseif ($service_date === '') {
            $error = 'تاریخ انجام خدمت الزامی است.';
        } elseif (!is_jalali_date_not_future($service_date)) {
            $error = 'تاریخ انجام خدمت نامعتبر است یا در آینده است.';
        } elseif ($requiredItems) {
            foreach ($requiredItems as $idx => $item) {
                if (empty($_FILES['item_docs']['name'][$idx])) {
                    $error = 'آپلود مدرک برای «' . $item . '» الزامی است.';
                    break;
                }
            }
        } elseif (empty($_FILES['documents']['name'][0] ?? '')) {
            $error = 'حداقل یک مدرک باید آپلود شود.';
        }
    }

    if (!$error) {
        try {
            $pdo->beginTransaction();

            $jalali_year = current_jalali_year();
            $stmt = $pdo->prepare("
                INSERT INTO claims (user_id, row_id, claim_year, amount_requested, description, status,
                                     is_dependent, dependent_id, medical_center, service_date, receipt_number)
                VALUES (?, ?, ?, ?, ?, 'pending', ?, ?, ?, ?, ?)
            ");
            $stmt->execute([
                $user['id'], $row_id, $jalali_year, $amount, $description,
                $dependent_id ? 1 : 0, $dependent_id, $medical_center, $service_date, $receipt_number ?: null,
            ]);
            $claim_id = $pdo->lastInsertId();

            $stmt2 = $pdo->prepare("INSERT INTO claim_documents (claim_id, file_path, original_name, item_label) VALUES (?, ?, ?, ?)");

            if ($requiredItems) {
                foreach ($requiredItems as $idx => $item) {
                    if (empty($_FILES['item_docs']['name'][$idx])) continue;
                    $single = [
                        'name' => $_FILES['item_docs']['name'][$idx],
                        'type' => $_FILES['item_docs']['type'][$idx],
                        'tmp_name' => $_FILES['item_docs']['tmp_name'][$idx],
                        'error' => $_FILES['item_docs']['error'][$idx],
                        'size' => $_FILES['item_docs']['size'][$idx],
                    ];
                    $up = handle_document_upload($single, $claim_id);
                    if ($up) {
                        $stmt2->execute([$claim_id, $up['file_path'], $up['original_name'], $item]);
                    }
                }
            } else {
                $count = count($_FILES['documents']['name'] ?? []);
                for ($i = 0; $i < $count; $i++) {
                    if ($_FILES['documents']['error'][$i] === UPLOAD_ERR_NO_FILE) continue;
                    $single = [
                        'name' => $_FILES['documents']['name'][$i],
                        'type' => $_FILES['documents']['type'][$i],
                        'tmp_name' => $_FILES['documents']['tmp_name'][$i],
                        'error' => $_FILES['documents']['error'][$i],
                        'size' => $_FILES['documents']['size'][$i],
                    ];
                    $up = handle_document_upload($single, $claim_id);
                    if ($up) {
                        $stmt2->execute([$claim_id, $up['file_path'], $up['original_name'], null]);
                    }
                }
            }

            $pdo->commit();
            log_activity($pdo, 'submit_claim', 'ثبت درخواست جدید برای ردیف: ' . $row['name'], $claim_id);
            $_SESSION['flash_success'] = 'درخواست شما با موفقیت ثبت شد و در انتظار بررسی مدیر/مالی است.';
            header('Location: ' . base_url('employee/history.php'));
            exit;
        } catch (Exception $e) {
            $pdo->rollBack();
            $error = 'خطا: ' . $e->getMessage();
        }
    }
}

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

<h4 class="mb-4">ثبت درخواست هزینه جدید</h4>

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

<div class="card p-4">
<form method="post" enctype="multipart/form-data" novalidate>
  <?= csrf_field() ?>

  <?php if ($dependents_enabled && $dependents): ?>
  <div class="mb-3">
    <label class="form-label">این درخواست برای چه کسی است؟</label>
    <select name="for_whom" class="form-select">
      <option value="self">خودم</option>
      <?php foreach ($dependents as $d): ?>
        <option value="<?= $d['id'] ?>"><?= htmlspecialchars($d['full_name']) ?> (<?= $relationLabels[$d['relation']] ?? '' ?>)</option>
      <?php endforeach; ?>
    </select>
    <div class="form-text">توجه: برای افراد تبعی، طبق تعهدنامه سامانه، فقط بخشی از مبلغ توسط شرکت پرداخت می‌شود.</div>
  </div>
  <?php endif; ?>

  <div class="row g-2">
    <div class="col-md-6 mb-3">
      <label class="form-label">ردیف درمانی</label>
      <select name="row_id" id="row_id" class="form-select" required onchange="showDocs()">
        <option value="">— انتخاب کنید —</option>
        <?php foreach ($rows as $r): ?>
          <option value="<?= $r['id'] ?>" data-docs="<?= htmlspecialchars($r['required_documents']) ?>" <?= $selected_row_id == $r['id'] ? 'selected' : '' ?>>
            <?= htmlspecialchars($r['name']) ?> (سقف: <?= format_amount($r['max_amount']) ?>)
          </option>
        <?php endforeach; ?>
      </select>
    </div>
  </div>

  <div class="row g-2">
    <div class="col-md-6 mb-3">
      <label class="form-label">مبلغ درخواستی (ریال)</label>
      <input type="text" name="amount" class="form-control money-input" required placeholder="مثلاً 5,000,000" inputmode="numeric">
    </div>
    <div class="col-md-6 mb-3">
      <label class="form-label">نام مرکز درمانی</label>
      <input type="text" name="medical_center" class="form-control" required placeholder="مثلاً بیمارستان/کلینیک ...">
    </div>
    <div class="col-md-6 mb-3">
      <label class="form-label">تاریخ انجام خدمت (شمسی)</label>
      <input type="text" name="service_date" class="form-control jalali-date-input" required autocomplete="off" placeholder="مثلاً 1404/05/10">
    </div>
    <div class="col-md-6 mb-3">
      <label class="form-label">شماره فیش/فاکتور (اختیاری)</label>
      <input type="text" name="receipt_number" class="form-control">
    </div>
  </div>

  <div class="mb-3">
    <label class="form-label">توضیحات (اختیاری)</label>
    <textarea name="description" class="form-control" rows="2"></textarea>
  </div>

  <div id="docs_area" class="mb-3"></div>

  <button type="submit" class="btn btn-primary">ثبت درخواست</button>
</form>
</div>

<script>
const rowsData = <?= json_encode(array_map(function ($r) {
    return ['id' => (int)$r['id'], 'docs' => $r['required_documents']];
}, $rows)) ?>;

function showDocs() {
    const sel = document.getElementById('row_id');
    const rowId = parseInt(sel.value || '0', 10);
    const area = document.getElementById('docs_area');
    area.innerHTML = '';

    const rowInfo = rowsData.find(r => r.id === rowId);
    if (!rowInfo || !rowInfo.docs || !rowInfo.docs.trim()) {
        if (rowId) {
            area.innerHTML = '<label class="form-label">آپلود مدارک (می‌توانید چند فایل انتخاب کنید)</label>' +
                '<input type="file" name="documents[]" class="form-control" multiple required accept=".jpg,.jpeg,.png,.pdf">';
        }
        return;
    }

    const items = rowInfo.docs.split('\n').map(s => s.trim()).filter(s => s.length > 0);
    let html = '<label class="form-label d-block">مدارک لازم (آپلود همه موارد زیر الزامی است)</label>';
    html += '<div class="row g-2">';
    items.forEach((item, idx) => {
        const safeItem = item.replace(/</g, '&lt;');
        html += '<div class="col-md-4 mb-2">' +
            '<label class="form-label small">' + (idx + 1) + '. ' + safeItem + '</label>' +
            '<input type="file" name="item_docs[' + idx + ']" class="form-control form-control-sm" required accept=".jpg,.jpeg,.png,.pdf">' +
            '</div>';
    });
    html += '</div>';
    area.innerHTML = html;
}
document.addEventListener('DOMContentLoaded', showDocs);
</script>

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