<?php
declare(strict_types=1);

if (session_status() !== PHP_SESSION_ACTIVE) {
    session_start();
}

require_once __DIR__ . '/../db.php';
require_once __DIR__ . '/../inc/layout.php';

if (empty($_SESSION['user_id'])) {
    header('Location: ' . u('index.html?e=1'));
    exit;
}

if (!in_array(current_role(), ['OWNER', 'ADMIN', 'LAWYER', 'STAFF'], true)) {
    http_response_code(403);
    exit('غير مصرح');
}

function ai_case_h($v): string
{
    return htmlspecialchars((string)$v, ENT_QUOTES, 'UTF-8');
}

function ai_case_table_exists(PDO $pdo, string $table): bool
{
    static $cache = [];
    if (isset($cache[$table])) {
        return $cache[$table];
    }

    try {
        $st = $pdo->prepare("
            SELECT COUNT(*)
            FROM information_schema.tables
            WHERE table_schema = DATABASE()
              AND table_name = ?
        ");
        $st->execute([$table]);
        $cache[$table] = ((int)$st->fetchColumn() > 0);
        return $cache[$table];
    } catch (Throwable $e) {
        return false;
    }
}

function ai_case_columns(PDO $pdo, string $table): array
{
    static $cache = [];
    if (isset($cache[$table])) {
        return $cache[$table];
    }

    if (!ai_case_table_exists($pdo, $table)) {
        $cache[$table] = [];
        return [];
    }

    try {
        $st = $pdo->prepare("
            SELECT COLUMN_NAME
            FROM information_schema.columns
            WHERE table_schema = DATABASE()
              AND table_name = ?
        ");
        $st->execute([$table]);
        $cols = $st->fetchAll(PDO::FETCH_COLUMN);
        $cache[$table] = is_array($cols) ? array_map('strtolower', $cols) : [];
        return $cache[$table];
    } catch (Throwable $e) {
        return [];
    }
}

function ai_case_has_col(PDO $pdo, string $table, string $column): bool
{
    return in_array(strtolower($column), ai_case_columns($pdo, $table), true);
}

function ai_case_pick_col(PDO $pdo, string $table, array $candidates): ?string
{
    foreach ($candidates as $c) {
        if (ai_case_has_col($pdo, $table, $c)) {
            return $c;
        }
    }
    return null;
}

function ai_case_like_escape(string $s): string
{
    return str_replace(['\\', '%', '_'], ['\\\\', '\\%', '\\_'], $s);
}

function ai_case_clean_text(?string $text): string
{
    $text = trim((string)$text);
    $text = str_replace(["\r\n", "\r"], "\n", $text);
    $text = preg_replace('/[ \t]+/u', ' ', $text);
    $text = preg_replace("/\n{3,}/u", "\n\n", $text);
    return trim((string)$text);
}

function ai_case_excerpt(string $text, int $limit = 280): string
{
    $text = ai_case_clean_text($text);
    if (mb_strlen($text) <= $limit) {
        return $text;
    }
    return mb_substr($text, 0, $limit) . '...';
}

function ai_case_analyze(array $case, array $sessions): array
{
    $status = strtoupper(trim((string)($case['status'] ?? '')));
    $notes  = trim((string)($case['notes'] ?? ''));
    $title  = trim((string)($case['title'] ?? ''));

    $strengths = [];
    $risks = [];
    $actions = [];

    if ($title !== '') {
        $strengths[] = 'تم تحديد عنوان القضية بوضوح داخل النظام.';
    } else {
        $risks[] = 'عنوان القضية غير واضح أو غير مسجل.';
    }

    if ($notes !== '') {
        $strengths[] = 'توجد ملاحظات مسجلة يمكن الاستفادة منها في التحليل.';
    } else {
        $risks[] = 'لا توجد ملاحظات تفصيلية كافية داخل ملف القضية.';
    }

    if ($status === 'OPEN' || $status === 'ACTIVE' || $status === 'PENDING') {
        $actions[] = 'مراجعة آخر تحديث على الملف والتأكد من استكمال المستندات.';
    }

    if ($status === 'CLOSED') {
        $actions[] = 'التحقق من أرشفة المستندات النهائية ونتيجة الحكم.';
    }

    if ($status === 'POSTPONED') {
        $risks[] = 'القضية أو إحدى جلساتها مؤجلة، يجب متابعة الموعد القادم بدقة.';
        $actions[] = 'تأكيد تاريخ الجلسة القادمة وإبلاغ المسؤول عنها.';
    }

    if (count($sessions) > 0) {
        $strengths[] = 'يوجد سجل جلسات مرتبط بالقضية داخل النظام.';
        $actions[] = 'مراجعة آخر جلسة والتأكد من تحديث النتيجة أو القرار.';
    } else {
        $risks[] = 'لا توجد جلسات مرتبطة بالقضية أو لم يتم تسجيلها بعد.';
        $actions[] = 'إضافة أو مراجعة بيانات الجلسات إن وجدت.';
    }

    if (!$strengths) {
        $strengths[] = 'الملف موجود في النظام ويمكن البناء عليه في التحليل.';
    }

    if (!$risks) {
        $risks[] = 'لا توجد مؤشرات خطر ظاهرة من البيانات الحالية، لكن يلزم تقييم قانوني بشري.';
    }

    if (!$actions) {
        $actions[] = 'مراجعة الملف يدويًا واستكمال البيانات الناقصة قبل اتخاذ أي إجراء.';
    }

    return [
        'summary'   => 'هذا تحليل مبدئي آلي مبني على البيانات المدخلة في النظام، وليس رأيًا قانونيًا نهائيًا.',
        'strengths' => array_values(array_unique($strengths)),
        'risks'     => array_values(array_unique($risks)),
        'actions'   => array_values(array_unique($actions)),
    ];
}

$pdo = db();
if (!$pdo instanceof PDO) {
    http_response_code(500);
    exit('DB not ready');
}

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

$role     = current_role();
$branchId = current_branch_id();

$q = trim((string)($_GET['q'] ?? ''));
$caseId = (int)($_GET['id'] ?? 0);

$err = '';
$caseData = null;
$sessions = [];
$analysis = null;

render_layout_start('تحليل القضايا بالذكاء القانوني');

if (!ai_case_table_exists($pdo, 'cases')) {
    echo '<div class="msg err">جدول القضايا cases غير موجود في قاعدة البيانات.</div>';
    render_layout_end();
    exit;
}

$idCol         = ai_case_pick_col($pdo, 'cases', ['id']);
$caseNoCol     = ai_case_pick_col($pdo, 'cases', ['case_no', 'case_number', 'file_number', 'reference_no']);
$titleCol      = ai_case_pick_col($pdo, 'cases', ['title', 'case_title', 'subject']);
$statusCol     = ai_case_pick_col($pdo, 'cases', ['status', 'case_status']);
$typeCol       = ai_case_pick_col($pdo, 'cases', ['case_type', 'type']);
$clientNameCol = ai_case_pick_col($pdo, 'cases', ['client_name']);
$courtCol      = ai_case_pick_col($pdo, 'cases', ['court_name', 'court']);
$notesCol      = ai_case_pick_col($pdo, 'cases', ['notes', 'description', 'case_notes']);
$branchCol     = ai_case_pick_col($pdo, 'cases', ['branch_id']);
$createdCol    = ai_case_pick_col($pdo, 'cases', ['created_at', 'created_on']);

if ($idCol === null) {
    echo '<div class="msg err">تعذر تحديد العمود الأساسي للقضايا.</div>';
    render_layout_end();
    exit;
}

if ($caseId > 0 || $q !== '') {
    try {
        $selectCols = [];
        foreach ([$idCol, $caseNoCol, $titleCol, $statusCol, $typeCol, $clientNameCol, $courtCol, $notesCol, $branchCol, $createdCol] as $col) {
            if ($col) {
                $selectCols[] = "`{$col}`";
            }
        }

        $where = [];
        $params = [];

        if ($caseId > 0) {
            $where[] = "`{$idCol}` = ?";
            $params[] = $caseId;
        } else {
            $safe = '%' . ai_case_like_escape($q) . '%';
            $searchParts = [];

            foreach (array_filter([$caseNoCol, $titleCol, $clientNameCol, $courtCol, $notesCol]) as $col) {
                $searchParts[] = "`{$col}` LIKE ?";
                $params[] = $safe;
            }

            if ($searchParts) {
                $where[] = '(' . implode(' OR ', $searchParts) . ')';
            }
        }

        if ($branchCol && !in_array($role, ['OWNER', 'ADMIN'], true)) {
            $where[] = "`{$branchCol}` = ?";
            $params[] = $branchId;
        }

        $sql = "SELECT " . implode(', ', array_unique($selectCols)) . " FROM `cases`";
        if ($where) {
            $sql .= " WHERE " . implode(' AND ', $where);
        }
        $sql .= " ORDER BY `" . ($createdCol ?: $idCol) . "` DESC LIMIT 1";

        $st = $pdo->prepare($sql);
        $st->execute($params);
        $row = $st->fetch();

        if ($row) {
            $caseData = [
                'id'          => (int)($row[$idCol] ?? 0),
                'case_no'     => $caseNoCol ? (string)($row[$caseNoCol] ?? '') : '',
                'title'       => $titleCol ? (string)($row[$titleCol] ?? '') : '',
                'status'      => $statusCol ? (string)($row[$statusCol] ?? '') : '',
                'type'        => $typeCol ? (string)($row[$typeCol] ?? '') : '',
                'client_name' => $clientNameCol ? (string)($row[$clientNameCol] ?? '') : '',
                'court_name'  => $courtCol ? (string)($row[$courtCol] ?? '') : '',
                'notes'       => $notesCol ? (string)($row[$notesCol] ?? '') : '',
                'created_at'  => $createdCol ? (string)($row[$createdCol] ?? '') : '',
            ];
        } else {
            $err = 'لم يتم العثور على قضية مطابقة.';
        }

        if ($caseData && ai_case_table_exists($pdo, 'case_sessions')) {
            $sessIdCol      = ai_case_pick_col($pdo, 'case_sessions', ['id']);
            $sessCaseIdCol  = ai_case_pick_col($pdo, 'case_sessions', ['case_id']);
            $sessDateCol    = ai_case_pick_col($pdo, 'case_sessions', ['session_date', 'hearing_date', 'date']);
            $sessTimeCol    = ai_case_pick_col($pdo, 'case_sessions', ['session_time', 'hearing_time', 'time']);
            $sessCourtCol   = ai_case_pick_col($pdo, 'case_sessions', ['court_name', 'court']);
            $sessStatusCol  = ai_case_pick_col($pdo, 'case_sessions', ['status']);
            $sessNotesCol   = ai_case_pick_col($pdo, 'case_sessions', ['notes', 'result', 'decision']);

            if ($sessCaseIdCol) {
                $sessSelect = [];
                foreach ([$sessIdCol, $sessCaseIdCol, $sessDateCol, $sessTimeCol, $sessCourtCol, $sessStatusCol, $sessNotesCol] as $col) {
                    if ($col) {
                        $sessSelect[] = "`{$col}`";
                    }
                }

                $sql2 = "SELECT " . implode(', ', array_unique($sessSelect)) . "
                         FROM `case_sessions`
                         WHERE `{$sessCaseIdCol}` = ?
                         ORDER BY `" . ($sessDateCol ?: $sessIdCol ?: $sessCaseIdCol) . "` DESC
                         LIMIT 5";
                $st2 = $pdo->prepare($sql2);
                $st2->execute([$caseData['id']]);
                $sessRows = $st2->fetchAll();

                foreach ($sessRows as $s) {
                    $sessions[] = [
                        'date'   => $sessDateCol ? (string)($s[$sessDateCol] ?? '') : '',
                        'time'   => $sessTimeCol ? (string)($s[$sessTimeCol] ?? '') : '',
                        'court'  => $sessCourtCol ? (string)($s[$sessCourtCol] ?? '') : '',
                        'status' => $sessStatusCol ? (string)($s[$sessStatusCol] ?? '') : '',
                        'notes'  => $sessNotesCol ? (string)($s[$sessNotesCol] ?? '') : '',
                    ];
                }
            }
        }

        if ($caseData) {
            $analysis = ai_case_analyze($caseData, $sessions);
        }
    } catch (Throwable $e) {
        $err = 'حدث خطأ أثناء تحليل القضية: ' . $e->getMessage();
    }
}
?>

<style>
.ai-case-page{
  width:100%;
  max-width:100%;
}
.ai-hero{
  border:1px solid rgba(255,255,255,.08);
  background:linear-gradient(135deg, rgba(0,106,122,.35), rgba(0,66,79,.18));
  border-radius:22px;
  padding:24px;
  margin-bottom:18px;
  box-shadow:0 10px 30px rgba(0,0,0,.14);
}
.ai-hero h1{
  margin:0 0 8px;
  font-size:28px;
  line-height:1.3;
}
.ai-hero p{
  margin:0;
  color:rgba(255,255,255,.78);
  line-height:1.8;
  font-size:14px;
}
.ai-search-card,
.ai-box{
  border:1px solid var(--line);
  background:rgba(255,255,255,.04);
  border-radius:18px;
  padding:16px;
  margin-bottom:16px;
}
.ai-search-grid{
  display:grid;
  grid-template-columns:1.2fr .8fr auto;
  gap:12px;
  align-items:end;
}
.ai-label{
  display:block;
  margin-bottom:8px;
  font-size:13px;
  color:var(--muted);
  font-weight:700;
}
.ai-input{
  width:100%;
}
.ai-btn{
  min-width:140px;
}
.ai-stats{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(220px,1fr));
  gap:12px;
  margin-bottom:16px;
}
.ai-stat{
  border:1px solid var(--line);
  background:rgba(255,255,255,.04);
  border-radius:18px;
  padding:16px;
}
.ai-stat .k{
  color:var(--muted);
  font-size:12px;
  margin-bottom:8px;
}
.ai-stat .v{
  font-size:18px;
  font-weight:800;
  line-height:1.7;
}
.ai-grid{
  display:grid;
  grid-template-columns:1.1fr .9fr;
  gap:16px;
}
.ai-list{
  margin:0;
  padding-right:18px;
}
.ai-list li{
  margin-bottom:10px;
  line-height:1.9;
}
.ai-session{
  border:1px solid var(--line);
  background:rgba(0,0,0,.10);
  border-radius:16px;
  padding:12px;
  margin-bottom:10px;
}
.ai-session:last-child{
  margin-bottom:0;
}
.ai-session-top{
  display:flex;
  gap:8px;
  flex-wrap:wrap;
  margin-bottom:8px;
}
.ai-badge{
  display:inline-block;
  padding:6px 10px;
  border-radius:999px;
  border:1px solid var(--line);
  background:rgba(255,255,255,.04);
  font-size:12px;
}
.ai-note{
  color:var(--muted);
  line-height:1.8;
  font-size:13px;
}
.ai-disclaimer{
  border:1px dashed rgba(212,175,55,.45);
  background:rgba(212,175,55,.08);
  border-radius:16px;
  padding:14px;
  color:rgba(255,255,255,.9);
  line-height:1.9;
  margin-top:10px;
}
@media (max-width: 900px){
  .ai-search-grid,
  .ai-grid{
    grid-template-columns:1fr;
  }
}
</style>

<div class="ai-case-page">
  <div class="ai-hero">
    <h1>تحليل القضايا بالذكاء القانوني</h1>
    <p>ابحث عن قضية برقمها أو عنوانها أو اسم العميل للحصول على تحليل مبدئي آلي مبني على بيانات النظام والجلسات المرتبطة بها.</p>
  </div>

  <?php if ($err !== ''): ?>
    <div class="msg err"><?= ai_case_h($err) ?></div>
  <?php endif; ?>

  <div class="ai-search-card">
    <form method="get" action="">
      <div class="ai-search-grid">
        <div>
          <label class="ai-label">بحث نصي</label>
          <input class="input ai-input" type="text" name="q" value="<?= ai_case_h($q) ?>" placeholder="مثال: 1023 أو أحمد الكعبي أو نزاع عمالي">
        </div>

        <div>
          <label class="ai-label">رقم داخلي للقضية</label>
          <input class="input ai-input" type="number" name="id" value="<?= $caseId > 0 ? (int)$caseId : '' ?>" placeholder="مثال: 15">
        </div>

        <div>
          <button class="btn ai-btn" type="submit">تحليل القضية</button>
        </div>
      </div>
    </form>
  </div>

  <?php if ($caseData): ?>
    <div class="ai-stats">
      <div class="ai-stat">
        <div class="k">رقم القضية</div>
        <div class="v"><?= ai_case_h($caseData['case_no'] !== '' ? $caseData['case_no'] : ('#' . $caseData['id'])) ?></div>
      </div>

      <div class="ai-stat">
        <div class="k">عنوان القضية</div>
        <div class="v"><?= ai_case_h($caseData['title'] !== '' ? $caseData['title'] : '-') ?></div>
      </div>

      <div class="ai-stat">
        <div class="k">العميل</div>
        <div class="v"><?= ai_case_h($caseData['client_name'] !== '' ? $caseData['client_name'] : '-') ?></div>
      </div>

      <div class="ai-stat">
        <div class="k">الحالة</div>
        <div class="v"><?= ai_case_h($caseData['status'] !== '' ? $caseData['status'] : '-') ?></div>
      </div>

      <div class="ai-stat">
        <div class="k">نوع القضية</div>
        <div class="v"><?= ai_case_h($caseData['type'] !== '' ? $caseData['type'] : '-') ?></div>
      </div>

      <div class="ai-stat">
        <div class="k">المحكمة</div>
        <div class="v"><?= ai_case_h($caseData['court_name'] !== '' ? $caseData['court_name'] : '-') ?></div>
      </div>
    </div>

    <div class="ai-grid">
      <div>
        <div class="ai-box">
          <div class="cardHead">
            <div><strong>الملخص الذكي</strong></div>
            <a class="btn ghost" href="<?= ai_case_h(u('case_edit.php?id=' . (int)$caseData['id'])) ?>">فتح القضية</a>
          </div>

          <div class="ai-note"><?= ai_case_h($analysis['summary'] ?? '') ?></div>

          <div class="ai-disclaimer">
            هذا التحليل مساعد داخلي فقط، ويعتمد على البيانات المسجلة داخل النظام. يجب مراجعة المحامي أو المسؤول المختص قبل اعتماد أي موقف قانوني أو إجرائي.
          </div>
        </div>

        <div class="ai-box">
          <div class="cardHead"><div><strong>نقاط القوة</strong></div></div>
          <ul class="ai-list">
            <?php foreach (($analysis['strengths'] ?? []) as $item): ?>
              <li><?= ai_case_h($item) ?></li>
            <?php endforeach; ?>
          </ul>
        </div>

        <div class="ai-box">
          <div class="cardHead"><div><strong>المخاطر أو الملاحظات</strong></div></div>
          <ul class="ai-list">
            <?php foreach (($analysis['risks'] ?? []) as $item): ?>
              <li><?= ai_case_h($item) ?></li>
            <?php endforeach; ?>
          </ul>
        </div>

        <div class="ai-box">
          <div class="cardHead"><div><strong>الإجراءات المقترحة</strong></div></div>
          <ul class="ai-list">
            <?php foreach (($analysis['actions'] ?? []) as $item): ?>
              <li><?= ai_case_h($item) ?></li>
            <?php endforeach; ?>
          </ul>
        </div>
      </div>

      <div>
        <div class="ai-box">
          <div class="cardHead"><div><strong>ملاحظات القضية</strong></div></div>
          <div class="ai-note">
            <?= nl2br(ai_case_h($caseData['notes'] !== '' ? ai_case_excerpt($caseData['notes'], 800) : 'لا توجد ملاحظات مسجلة.')) ?>
          </div>
        </div>

        <div class="ai-box">
          <div class="cardHead"><div><strong>آخر الجلسات</strong></div></div>

          <?php if (!$sessions): ?>
            <div class="ai-note">لا توجد جلسات مسجلة لهذه القضية أو لم يتم العثور على جدول الجلسات.</div>
          <?php else: ?>
            <?php foreach ($sessions as $s): ?>
              <div class="ai-session">
                <div class="ai-session-top">
                  <span class="ai-badge">التاريخ: <?= ai_case_h($s['date'] !== '' ? $s['date'] : '-') ?></span>
                  <span class="ai-badge">الوقت: <?= ai_case_h($s['time'] !== '' ? $s['time'] : '-') ?></span>
                  <span class="ai-badge">الحالة: <?= ai_case_h($s['status'] !== '' ? $s['status'] : '-') ?></span>
                </div>
                <div class="ai-note">
                  المحكمة: <?= ai_case_h($s['court'] !== '' ? $s['court'] : '-') ?><br>
                  الملاحظة: <?= ai_case_h($s['notes'] !== '' ? ai_case_excerpt($s['notes'], 220) : 'لا توجد ملاحظة.') ?>
                </div>
              </div>
            <?php endforeach; ?>
          <?php endif; ?>
        </div>
      </div>
    </div>
  <?php else: ?>
    <div class="ai-box">
      <div class="ai-note">
        اكتب رقم القضية أو اسم العميل أو عنوان القضية ثم اضغط "تحليل القضية" للحصول على قراءة مبدئية من النظام.
      </div>
    </div>
  <?php endif; ?>
</div>

<?php render_layout_end(); ?>