<?php
require_once __DIR__ . '/../../config/constants.php';
require_once __DIR__ . '/../../config/database.php';
require_once __DIR__ . '/../../includes/auth.php';
require_once __DIR__ . '/../../includes/rbac.php';
require_once __DIR__ . '/../../includes/functions.php';
require_once __DIR__ . '/../../includes/layout.php';
require_once __DIR__ . '/../../includes/sidebar_helper.php';

requireLogin(); requireRole(ROLE_CLERK);
$GLOBALS['BASE_URL_CSS'] = BASE_URL . '/public/assets/css/main.css';
$user = currentUser(); $pdo = db();

// ── AJAX: جلب المحاكم حسب الفرع والمرحلة والولاية ─────────────
if (isset($_GET['ajax_courts'])) {
    header('Content-Type: application/json; charset=utf-8');
    $branch = $_GET['branch'] ?? 'ordinary';
    $stage  = $_GET['stage']  ?? 'ibtidai';
    $wilaya = $_GET['wilaya'] ?? null;
    echo json_encode(getCourtsFor($stage, $branch, $wilaya ?: null), JSON_UNESCAPED_UNICODE);
    exit;
}

$error = $success = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $required = ['title','case_type','plaintiff','defendant','filing_date'];
    $missing  = array_filter($required, fn($f) => empty($_POST[$f]));

    // وثيقة التأسيس إلزامية
    if (empty($_FILES['foundation_doc']['name'])) {
        $error = 'وثيقة افتتاح الدعوى (وثيقة التأسيس) إلزامية';
    } elseif ($missing) {
        $error = 'يرجى ملء جميع الحقول الإلزامية';
    } else {
        // فرع القضاء يُستنتج من نوع القضية افتراضياً، مع إمكانية التعديل اليدوي
        $caseType   = $_POST['case_type'];
        $branchAuto = CASE_TYPE_BRANCH[$caseType] ?? 'ordinary';
        $branch     = $_POST['court_branch'] ?? $branchAuto;

        try {
            $pdo->beginTransaction();

            // 1) رفع وثيقة التأسيس
            $foundationUpload = uploadFile($_FILES['foundation_doc'], 'cases/foundation');
            if (!$foundationUpload['success']) {
                throw new RuntimeException($foundationUpload['message']);
            }

            // 2) جلب رمز المحكمة لتوليد رقم القضية
            $courtId = $_POST['court_id'] ?: null;
            $courtCode = null;
            if ($courtId) {
                $s = $pdo->prepare('SELECT court_code FROM courts WHERE id = ?');
                $s->execute([$courtId]);
                $courtCode = $s->fetchColumn() ?: null;
            }
            $caseNum = generateCaseNumberFor($courtCode);

            // 3) إنشاء القضية
            $pdo->prepare("INSERT INTO cases
                (case_number,title,case_type,court_branch,plaintiff,defendant,description,foundation_doc_path,stage,status,court_id,clerk_id,priority,filing_date)
                VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)")
                ->execute([
                    $caseNum,
                    $_POST['title'],
                    $caseType,
                    $branch,
                    $_POST['plaintiff'],
                    $_POST['defendant'],
                    $_POST['description'] ?? '',
                    $foundationUpload['path'],
                    $_POST['stage'] ?? 'ibtidai',
                    'open',
                    $courtId,
                    $user['id'],
                    $_POST['priority'] ?? 'normal',
                    $_POST['filing_date'],
                ]);
            $caseId = (int)$pdo->lastInsertId();

            // 4) تسجيل وثيقة التأسيس في جدول documents لتظهر في قائمة الوثائق
            $pdo->prepare("INSERT INTO documents (case_id,user_id,doc_type,title,file_path,file_size,mime_type)
                VALUES (?,?,?,?,?,?,?)")
                ->execute([
                    $caseId, $user['id'], 'foundation', 'عريضة افتتاح الدعوى',
                    $foundationUpload['path'],
                    $_FILES['foundation_doc']['size'] ?? null,
                    $_FILES['foundation_doc']['type'] ?? null,
                ]);

            // 5) رفع باقي وثائق القضية (متعدد، اختياري)
            $docCount = 1;
            if (!empty($_FILES['case_docs']['name']) && is_array($_FILES['case_docs']['name'])) {
                $docTypes = $_POST['case_doc_types'] ?? [];
                $docTitles = $_POST['case_doc_titles'] ?? [];
                foreach ($_FILES['case_docs']['name'] as $i => $name) {
                    if (!$name || empty($_FILES['case_docs']['tmp_name'][$i])) continue;
                    $single = [
                        'name'     => $_FILES['case_docs']['name'][$i],
                        'tmp_name' => $_FILES['case_docs']['tmp_name'][$i],
                        'size'     => $_FILES['case_docs']['size'][$i],
                        'type'     => $_FILES['case_docs']['type'][$i],
                        'error'    => $_FILES['case_docs']['error'][$i],
                    ];
                    $up = uploadFile($single, 'cases/docs');
                    if (!$up['success']) {
                        throw new RuntimeException("تعذّر رفع الوثيقة #{$i}: {$up['message']}");
                    }
                    $dType  = $docTypes[$i]  ?? 'other';
                    $dTitle = trim($docTitles[$i] ?? '') ?: (CASE_DOC_TYPES[$dType] ?? 'وثيقة');
                    $pdo->prepare("INSERT INTO documents (case_id,user_id,doc_type,title,file_path,file_size,mime_type)
                        VALUES (?,?,?,?,?,?,?)")
                        ->execute([
                            $caseId, $user['id'], $dType, $dTitle,
                            $up['path'], $single['size'], $single['type'],
                        ]);
                    $docCount++;
                }
            }

            // 6) إسناد محامي المدعي ومحامي المدعى عليه (إن وُجدا)
            //    هذا الإسناد يربط القضية بأطراف النزاع لحظة التأسيس،
            //    ويُمكّن المحامين المعنيين فوراً من الاطّلاع على القضية.
            $lawyersAssigned = 0;
            $plaintiffLawyer = (int)($_POST['plaintiff_lawyer_id'] ?? 0);
            $defendantLawyer = (int)($_POST['defendant_lawyer_id'] ?? 0);

            // التحقق من أن المعرّفات تعود لمحامين نشطين فعلاً (حماية ضد التلاعب)
            $validateLawyer = $pdo->prepare("SELECT 1 FROM users WHERE id = ? AND role = 'lawyer' AND status = 'active' LIMIT 1");

            if ($plaintiffLawyer > 0) {
                $validateLawyer->execute([$plaintiffLawyer]);
                if ($validateLawyer->fetchColumn()) {
                    $pdo->prepare("INSERT IGNORE INTO case_lawyers (case_id, lawyer_id, role) VALUES (?, ?, 'plaintiff_lawyer')")
                        ->execute([$caseId, $plaintiffLawyer]);
                    $lawyersAssigned++;
                }
            }
            if ($defendantLawyer > 0 && $defendantLawyer !== $plaintiffLawyer) {
                $validateLawyer->execute([$defendantLawyer]);
                if ($validateLawyer->fetchColumn()) {
                    $pdo->prepare("INSERT IGNORE INTO case_lawyers (case_id, lawyer_id, role) VALUES (?, ?, 'defendant_lawyer')")
                        ->execute([$caseId, $defendantLawyer]);
                    $lawyersAssigned++;
                }
            }

            $pdo->commit();
            auditLog($user['id'], 'create_case', 'cases', $caseId,
                "إنشاء قضية {$caseNum} + رفع {$docCount} وثيقة + إسناد {$lawyersAssigned} محامي/محامين");
            header("Location: case-view.php?id={$caseId}&msg=created");
            exit;

        } catch (Throwable $e) {
            if ($pdo->inTransaction()) $pdo->rollBack();
            $error = 'فشل حفظ القضية: ' . $e->getMessage();
            error_log('case-new error: ' . $e->getMessage());
        }
    }
}

// ── الولايات + قائمة المحاكم الابتدائية بالشلف لعرض افتراضي ──
$courts = $pdo->query("SELECT id, name, branch, level, wilaya_code FROM courts ORDER BY branch, level, name")->fetchAll();

// ── قائمة المحامين النشطين (لإسناد أطراف النزاع لحظة التأسيس) ──
$activeLawyers = $pdo->query("
    SELECT u.id, u.full_name, lp.bar_number, lp.bar_association
    FROM users u
    LEFT JOIN lawyer_profiles lp ON lp.user_id = u.id
    WHERE u.role = 'lawyer'
      AND u.status = 'active'
      AND (lp.review_status = 'approved' OR lp.review_status IS NULL)
    ORDER BY u.full_name
")->fetchAll();

$notifCount = getUnreadNotifCount($user['id']);
renderHead('قضية جديدة');
?>
<div class="sidebar" id="sidebar"><?php buildSidebar('cases','clerk'); ?></div>
<div class="sidebar-overlay" id="sidebarOverlay"></div>
<div class="main-wrap">
<?php renderTopbar('إضافة قضية جديدة', $notifCount); ?>
<div class="page-content">

  <div class="d-flex align-items-center gap-3 mb-4">
    <a href="cases.php" class="btn btn-outline-secondary btn-sm"><i class="bi bi-arrow-right"></i> رجوع</a>
    <h5 class="font-amiri fw-700 mb-0 text-navy">تسجيل قضية جديدة</h5>
  </div>

  <?php if ($error): ?>
    <div class="alert alert-danger mb-3"><i class="bi bi-exclamation-triangle-fill me-2"></i><?= htmlspecialchars($error) ?></div>
  <?php endif; ?>

  <form method="POST" enctype="multipart/form-data" id="caseForm">
    <div class="row g-3">
      <!-- العمود الأيمن: بيانات القضية والمحكمة -->
      <div class="col-lg-8">

        <!-- بيانات القضية -->
        <div class="panel mb-3">
          <div class="panel-body">
            <p class="form-section-title"><i class="bi bi-folder2-open"></i> بيانات القضية</p>
            <div class="row g-3">
              <div class="col-12">
                <label class="form-label">عنوان القضية <span class="text-danger">*</span></label>
                <input type="text" name="title" class="form-control"
                       value="<?= htmlspecialchars($_POST['title'] ?? '') ?>"
                       placeholder="مثال: نزاع حول عقد إيجار تجاري" required>
              </div>
              <div class="col-md-6">
                <label class="form-label">نوع القضية <span class="text-danger">*</span></label>
                <select name="case_type" id="case_type" class="form-select" required>
                  <option value="">اختر النوع</option>
                  <?php foreach (CASE_TYPES as $k => $v): ?>
                    <option value="<?= $k ?>" <?= ($_POST['case_type'] ?? '') === $k ? 'selected' : '' ?>><?= $v ?></option>
                  <?php endforeach; ?>
                </select>
              </div>
              <div class="col-md-6">
                <label class="form-label">تاريخ الإيداع <span class="text-danger">*</span></label>
                <input type="date" name="filing_date" class="form-control"
                       value="<?= $_POST['filing_date'] ?? date('Y-m-d') ?>" required>
              </div>

              <!-- أطراف النزاع -->
              <div class="col-md-6">
                <label class="form-label">المدعي / المشتكي <span class="text-danger">*</span></label>
                <input type="text" name="plaintiff" class="form-control"
                       value="<?= htmlspecialchars($_POST['plaintiff'] ?? '') ?>" required>
              </div>
              <div class="col-md-6">
                <label class="form-label">المدعى عليه <span class="text-danger">*</span></label>
                <input type="text" name="defendant" class="form-control"
                       value="<?= htmlspecialchars($_POST['defendant'] ?? '') ?>" required>
              </div>

              <!-- محامو الأطراف (إسناد لحظة التأسيس) -->
              <div class="col-md-6">
                <label class="form-label">
                  محامي المدعي
                  <small class="text-muted">(اختياري — يمكن إسناده لاحقاً)</small>
                </label>
                <select name="plaintiff_lawyer_id" class="form-select">
                  <option value="">— بلا محامٍ / يترافع بنفسه —</option>
                  <?php foreach ($activeLawyers as $lw): ?>
                    <option value="<?= $lw['id'] ?>" <?= ($_POST['plaintiff_lawyer_id'] ?? '') == $lw['id'] ? 'selected' : '' ?>>
                      <?= htmlspecialchars($lw['full_name']) ?>
                      <?= $lw['bar_number'] ? ' — رقم ' . htmlspecialchars($lw['bar_number']) : '' ?>
                    </option>
                  <?php endforeach; ?>
                </select>
              </div>
              <div class="col-md-6">
                <label class="form-label">
                  محامي المدعى عليه
                  <small class="text-muted">(اختياري — قد يظهر مع المذكرة الجوابية)</small>
                </label>
                <select name="defendant_lawyer_id" class="form-select">
                  <option value="">— غير محدَّد بعد —</option>
                  <?php foreach ($activeLawyers as $lw): ?>
                    <option value="<?= $lw['id'] ?>" <?= ($_POST['defendant_lawyer_id'] ?? '') == $lw['id'] ? 'selected' : '' ?>>
                      <?= htmlspecialchars($lw['full_name']) ?>
                      <?= $lw['bar_number'] ? ' — رقم ' . htmlspecialchars($lw['bar_number']) : '' ?>
                    </option>
                  <?php endforeach; ?>
                </select>
              </div>
              <div class="col-12">
                <label class="form-label">موضوع القضية / الوقائع</label>
                <textarea name="description" class="form-control" rows="4"
                          placeholder="ملخص موجز للوقائع والطلبات..."><?= htmlspecialchars($_POST['description'] ?? '') ?></textarea>
              </div>
            </div>
          </div>
        </div>

        <!-- اختيار المحكمة بالتدرج -->
        <div class="panel mb-3">
          <div class="panel-body">
            <p class="form-section-title"><i class="bi bi-bank2"></i> الجهة القضائية</p>
            <div class="row g-3">
              <div class="col-md-6">
                <label class="form-label">فرع القضاء <span class="text-danger">*</span></label>
                <select name="court_branch" id="court_branch" class="form-select">
                  <?php foreach (COURT_BRANCHES as $k => $v): ?>
                    <option value="<?= $k ?>" <?= ($_POST['court_branch'] ?? 'ordinary') === $k ? 'selected' : '' ?>><?= $v ?></option>
                  <?php endforeach; ?>
                </select>
                <small class="text-muted" id="branch_hint">يُحدَّد تلقائياً حسب نوع القضية، ويمكن تعديله.</small>
              </div>
              <div class="col-md-6">
                <label class="form-label">الولاية</label>
                <select name="wilaya" id="wilaya" class="form-select">
                  <option value="">— كل الولايات —</option>
                  <?php foreach (WILAYAS as $code => $name): ?>
                    <option value="<?= $code ?>" <?= ($_POST['wilaya'] ?? '02') === $code ? 'selected' : '' ?>>
                      <?= $code . ' — ' . $name ?>
                    </option>
                  <?php endforeach; ?>
                </select>
                <small class="text-muted">العينة المزروعة حالياً: ولاية الشلف (02).</small>
              </div>
              <div class="col-md-6">
                <label class="form-label">مرحلة التقاضي</label>
                <select name="stage" id="stage" class="form-select">
                  <?php foreach (STAGES as $k => $v): ?>
                    <option value="<?= $k ?>" <?= ($_POST['stage'] ?? 'ibtidai') === $k ? 'selected' : '' ?>><?= $v ?></option>
                  <?php endforeach; ?>
                </select>
              </div>
              <div class="col-md-6">
                <label class="form-label">المحكمة المختصة <span class="text-danger">*</span></label>
                <select name="court_id" id="court_id" class="form-select" required>
                  <option value="">— تحميل... —</option>
                </select>
                <small class="text-muted">تُصفّى تلقائياً حسب الفرع والمرحلة والولاية.</small>
              </div>
            </div>
          </div>
        </div>

        <!-- وثيقة التأسيس -->
        <div class="panel mb-3" style="border-right:3px solid var(--gold)">
          <div class="panel-body">
            <p class="form-section-title"><i class="bi bi-file-earmark-text"></i> وثيقة التأسيس <span class="text-danger">*</span></p>
            <p class="text-muted" style="font-size:13px;margin-top:-6px">
              عريضة افتتاح الدعوى (المُسجَّلة لدى أمانة الضبط) — إلزامية.
            </p>
            <input type="file" name="foundation_doc" class="form-control"
                   accept=".pdf,.jpg,.jpeg,.png,.doc,.docx" required>
            <small class="text-muted">الصيغ المقبولة: PDF, JPG, PNG, DOC, DOCX — الحجم الأقصى: 10 ميغا</small>
          </div>
        </div>

        <!-- وثائق إضافية -->
        <div class="panel mb-3">
          <div class="panel-body">
            <div class="d-flex justify-content-between align-items-center mb-2">
              <p class="form-section-title mb-0"><i class="bi bi-files"></i> وثائق القضية الإضافية</p>
              <button type="button" class="btn btn-sm btn-outline-gold" onclick="addDocRow()">
                <i class="bi bi-plus-circle"></i> إضافة وثيقة
              </button>
            </div>
            <p class="text-muted" style="font-size:13px">اختياري — يمكنك رفع وكالات، أدلة، تقارير خبرة، مذكرات، ...</p>
            <div id="docs_wrap"></div>
          </div>
        </div>

      </div>

      <!-- العمود الأيسر: الإعدادات والإجراء -->
      <div class="col-lg-4">
        <div class="panel mb-3">
          <div class="panel-body">
            <p class="form-section-title"><i class="bi bi-sliders"></i> الإعدادات</p>
            <div class="mb-3">
              <label class="form-label">الأولوية</label>
              <select name="priority" class="form-select">
                <option value="low"    <?= ($_POST['priority'] ?? '') === 'low'    ? 'selected' : '' ?>>منخفضة</option>
                <option value="normal" <?= ($_POST['priority'] ?? 'normal') === 'normal' ? 'selected' : '' ?>>عادية</option>
                <option value="high"   <?= ($_POST['priority'] ?? '') === 'high'   ? 'selected' : '' ?>>مرتفعة</option>
                <option value="urgent" <?= ($_POST['priority'] ?? '') === 'urgent' ? 'selected' : '' ?>>عاجلة</option>
              </select>
            </div>
          </div>
        </div>

        <div class="alert alert-gold" style="font-size:13px">
          <i class="bi bi-info-circle me-2"></i>
          سيُولَّد رقم القضية تلقائياً بصيغة:
          <strong><span id="caseNumPreview">TPI-CHL-01-<?= date('Y') ?>-XXXX</span></strong>
          (رمز المحكمة + السنة + التسلسل)
        </div>

        <div class="alert alert-info" style="font-size:12px">
          <i class="bi bi-shield-lock me-2"></i>
          <strong>الوصول للقضية:</strong>
          المحامون المُسندون أعلاه (محامي المدعي ومحامي المدعى عليه) يطّلعون على القضية فوراً بعد الحفظ، إضافةً لأمين الضبط والمدير. يمكن تعديل الإسناد لاحقاً من صفحة القضية.
        </div>

        <div class="d-grid gap-2 mt-3">
          <button type="submit" class="btn btn-gold btn-lg"><i class="bi bi-save"></i> حفظ القضية</button>
          <a href="cases.php" class="btn btn-outline-secondary">إلغاء</a>
        </div>
      </div>
    </div>
  </form>

</div></div>

<script>
const CASE_DOC_TYPES = <?= json_encode(CASE_DOC_TYPES, JSON_UNESCAPED_UNICODE) ?>;
const CASE_TYPE_BRANCH = <?= json_encode(CASE_TYPE_BRANCH) ?>;

// ── تحميل المحاكم حسب الفلاتر ────────────────────────────────
async function loadCourts() {
  const branch = document.getElementById('court_branch').value;
  const stage  = document.getElementById('stage').value;
  const wilaya = document.getElementById('wilaya').value;
  const sel    = document.getElementById('court_id');
  sel.innerHTML = '<option value="">جارٍ التحميل...</option>';
  try {
    const r = await fetch(`case-new.php?ajax_courts=1&branch=${branch}&stage=${stage}&wilaya=${wilaya}`);
    const list = await r.json();
    if (!list.length) {
      sel.innerHTML = '<option value="">لا توجد محاكم مطابقة</option>';
      return;
    }
    sel.innerHTML = '<option value="">اختر المحكمة...</option>';
    list.forEach(c => {
      const o = document.createElement('option');
      o.value = c.id;
      o.textContent = c.name + (c.daira ? ` (${c.daira})` : '');
      sel.appendChild(o);
    });
  } catch (e) {
    sel.innerHTML = '<option value="">خطأ في التحميل</option>';
  }
}

// ── ضبط الفرع تلقائياً حسب نوع القضية ───────────────────────
document.getElementById('case_type').addEventListener('change', function() {
  const auto = CASE_TYPE_BRANCH[this.value];
  if (auto) {
    document.getElementById('court_branch').value = auto;
    loadCourts();
  }
});
['court_branch','stage','wilaya'].forEach(id => {
  document.getElementById(id).addEventListener('change', loadCourts);
});

// ── إضافة صفوف الوثائق ──────────────────────────────────────
let docIdx = 0;
function addDocRow() {
  const wrap = document.getElementById('docs_wrap');
  const idx = docIdx++;
  const div = document.createElement('div');
  div.className = 'row g-2 align-items-end mb-2 doc-row';
  div.innerHTML = `
    <div class="col-md-3">
      <label class="form-label" style="font-size:12px">النوع</label>
      <select name="case_doc_types[${idx}]" class="form-select form-select-sm">
        ${Object.entries(CASE_DOC_TYPES).filter(([k]) => k !== 'foundation').map(([k,v]) =>
          `<option value="${k}">${v}</option>`).join('')}
      </select>
    </div>
    <div class="col-md-4">
      <label class="form-label" style="font-size:12px">الاسم/الوصف</label>
      <input type="text" name="case_doc_titles[${idx}]" class="form-control form-control-sm" placeholder="اختياري — وصف موجز">
    </div>
    <div class="col-md-4">
      <label class="form-label" style="font-size:12px">الملف</label>
      <input type="file" name="case_docs[${idx}]" class="form-control form-control-sm" accept=".pdf,.jpg,.jpeg,.png,.doc,.docx">
    </div>
    <div class="col-md-1">
      <button type="button" class="btn btn-sm btn-outline-danger" onclick="this.closest('.doc-row').remove()">
        <i class="bi bi-trash"></i>
      </button>
    </div>`;
  wrap.appendChild(div);
}

// تهيئة أولية
document.addEventListener('DOMContentLoaded', loadCourts);
</script>

<?php renderFoot(); ?>