<?php
/**
 * قواعد الاختبار الانعكاسية (Reflex Testing)
 * عند تحقق شرط على نتيجة فحص → إضافة فحص آخر تلقائياً للطلب
 */
use App\Core\Auth;
use App\Core\Tenant;

if (!($auth instanceof Auth) || !$auth->can('tests.view')) {
    http_response_code(403);
    echo 'غير مسموح بالوصول إلى قواعد الانعكاس';
    return;
}

$tenantId = (int)Tenant::id();
$tenantAnd = '';
$tenantParams = [$tenantId];
try {
    $db->query('SELECT tenant_id FROM reflex_rules LIMIT 1');
    $tenantAnd = ' AND r.tenant_id = ?';
} catch (Throwable $e) {
    $tenantAnd = '';
    $tenantParams = [];
}

$action = $_GET['action'] ?? 'index';
$msg = $_SESSION['reflex_msg'] ?? '';
$err = $_SESSION['reflex_error'] ?? '';
unset($_SESSION['reflex_msg'], $_SESSION['reflex_error']);

// ─── حذف ─────────────────────────────────────────────────────────────
if ($action === 'delete' && isset($_GET['id'])) {
    $id = (int)$_GET['id'];
    if ($id > 0) {
        try {
            $stmt = $db->prepare('DELETE FROM reflex_rules WHERE id = ? AND tenant_id = ?');
            $stmt->execute([$id, $tenantId]);
            $_SESSION['reflex_msg'] = 'تم حذف القاعدة بنجاح';
        } catch (Throwable $e) {
            $_SESSION['reflex_error'] = 'حدث خطأ أثناء الحذف';
        }
    }
    header('Location: index.php?page=reflex_rules');
    exit;
}

// ─── حفظ (إضافة/تعديل) ───────────────────────────────────────────────
if (($action === 'add' || $action === 'edit') && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $id = (int)($_POST['id'] ?? 0);
    $triggerTestId = (int)($_POST['trigger_test_id'] ?? 0);
    $conditionType = trim($_POST['condition_type'] ?? '');
    $conditionValue = trim($_POST['condition_value'] ?? '');
    $addTestId = (int)($_POST['add_test_id'] ?? 0);
    $isActive = isset($_POST['is_active']) ? 1 : 0;

    $validConditions = ['below', 'above', 'equals', 'not_equals'];
    if (!in_array($conditionType, $validConditions, true)) {
        $_SESSION['reflex_error'] = 'نوع الشرط غير صالح';
    } elseif ($triggerTestId <= 0 || $addTestId <= 0) {
        $_SESSION['reflex_error'] = 'اختر الفحص المحفّز والفحص المضاف';
    } elseif ($triggerTestId === $addTestId) {
        $_SESSION['reflex_error'] = 'الفحص المضاف يجب أن يكون مختلفاً عن الفحص المحفّز';
    } else {
        try {
            if ($id > 0) {
                $stmt = $db->prepare(
                    'UPDATE reflex_rules SET trigger_test_id=?, condition_type=?, condition_value=?, add_test_id=?, is_active=? WHERE id=? AND tenant_id=?'
                );
                $stmt->execute([$triggerTestId, $conditionType, $conditionValue ?: null, $addTestId, $isActive, $id, $tenantId]);
                $_SESSION['reflex_msg'] = 'تم تحديث القاعدة بنجاح';
            } else {
                $stmt = $db->prepare(
                    'INSERT INTO reflex_rules (tenant_id, trigger_test_id, condition_type, condition_value, add_test_id, is_active) VALUES (?,?,?,?,?,?)'
                );
                $stmt->execute([$tenantId, $triggerTestId, $conditionType, $conditionValue ?: null, $addTestId, $isActive]);
                $_SESSION['reflex_msg'] = 'تم إضافة القاعدة بنجاح';
            }
        } catch (Throwable $e) {
            $_SESSION['reflex_error'] = 'حدث خطأ: ' . $e->getMessage();
        }
    }
    header('Location: index.php?page=reflex_rules');
    exit;
}

// ─── جلب القواعد ─────────────────────────────────────────────────────
$rules = [];
$tests = [];
try {
    $stmt = $db->prepare(
        'SELECT r.*, t1.name AS trigger_name, t1.test_code AS trigger_code, t2.name AS add_name, t2.test_code AS add_code
         FROM reflex_rules r
         JOIN tests t1 ON t1.id = r.trigger_test_id
         JOIN tests t2 ON t2.id = r.add_test_id
         WHERE 1=1' . $tenantAnd . '
         ORDER BY r.id DESC'
    );
    $stmt->execute($tenantParams);
    $rules = $stmt->fetchAll();
} catch (Throwable $e) {}

try {
    $tAnd = '';
    $tParams = [];
    try {
        $db->query('SELECT tenant_id FROM tests LIMIT 1');
        $tAnd = ' AND tenant_id = ?';
        $tParams = [$tenantId];
    } catch (Throwable $e) {}
    $stmt = $db->prepare('SELECT id, test_code, name FROM tests WHERE 1=1' . $tAnd . ' ORDER BY name');
    $stmt->execute($tParams);
    $tests = $stmt->fetchAll();
} catch (Throwable $e) {}

$editRule = null;
if ($action === 'edit' && isset($_GET['id'])) {
    $editId = (int)$_GET['id'];
    foreach ($rules as $r) {
        if ((int)$r['id'] === $editId) {
            $editRule = $r;
            break;
        }
    }
}

$conditionLabels = [
    'below' => 'أقل من',
    'above' => 'أعلى من',
    'equals' => 'يساوي',
    'not_equals' => 'لا يساوي',
];
?>
<div class="page-header">
    <h1>🔄 قواعد الاختبار الانعكاسية</h1>
    <div class="actions-bar">
        <a href="index.php?page=tests" class="btn-secondary">الفحوصات</a>
        <a href="index.php?page=quality" class="btn-secondary">ضبط الجودة</a>
    </div>
</div>

<?php if ($msg): ?>
<div class="alert alert-success"><?php echo htmlspecialchars($msg, ENT_QUOTES, 'UTF-8'); ?></div>
<?php endif; ?>
<?php if ($err): ?>
<div class="alert alert-danger"><?php echo htmlspecialchars($err, ENT_QUOTES, 'UTF-8'); ?></div>
<?php endif; ?>

<div class="card" style="margin-bottom:20px;">
    <h3 style="margin-top:0;">ما هي قواعد الانعكاس؟</h3>
    <p style="color:var(--text-muted);line-height:1.7;">
        عند إدخال نتيجة فحص معيّن وتحقق شرط (مثلاً: أقل من، أعلى من)، يُضاف فحص آخر تلقائياً للطلب.
        <br>مثال: إذا كانت نتيجة TSH أعلى من 4 → إضافة فحص T4 Free تلقائياً.
    </p>
</div>

<!-- نموذج الإضافة/التعديل -->
<div class="card" style="margin-bottom:20px;">
    <h3 style="margin-top:0;"><?php echo $editRule ? 'تعديل القاعدة' : 'إضافة قاعدة جديدة'; ?></h3>
    <form method="post" action="index.php?page=reflex_rules&action=<?php echo $editRule ? 'edit' : 'add'; ?>" class="form-grid">
        <?php if ($editRule): ?>
        <input type="hidden" name="id" value="<?php echo (int)$editRule['id']; ?>">
        <?php endif; ?>
        <div>
            <label>الفحص المحفّز (الذي تُدخل نتيجته)</label>
            <select name="trigger_test_id" required>
                <option value="">— اختر —</option>
                <?php foreach ($tests as $t): ?>
                <option value="<?php echo (int)$t['id']; ?>" <?php echo $editRule && (int)$editRule['trigger_test_id'] === (int)$t['id'] ? 'selected' : ''; ?>>
                    <?php echo htmlspecialchars($t['name'] . ' (' . $t['test_code'] . ')', ENT_QUOTES, 'UTF-8'); ?>
                </option>
                <?php endforeach; ?>
            </select>
        </div>
        <div>
            <label>الشرط</label>
            <select name="condition_type" required>
                <?php foreach ($conditionLabels as $k => $v): ?>
                <option value="<?php echo htmlspecialchars($k, ENT_QUOTES, 'UTF-8'); ?>" <?php echo $editRule && $editRule['condition_type'] === $k ? 'selected' : ''; ?>>
                    <?php echo htmlspecialchars($v, ENT_QUOTES, 'UTF-8'); ?>
                </option>
                <?php endforeach; ?>
            </select>
        </div>
        <div>
            <label>قيمة الشرط (اختياري لـ equals/not_equals مع نصوص)</label>
            <input type="text" name="condition_value" value="<?php echo htmlspecialchars($editRule['condition_value'] ?? '', ENT_QUOTES, 'UTF-8'); ?>" placeholder="مثال: 4 أو positive">
        </div>
        <div>
            <label>الفحص المضاف تلقائياً</label>
            <select name="add_test_id" required>
                <option value="">— اختر —</option>
                <?php foreach ($tests as $t): ?>
                <option value="<?php echo (int)$t['id']; ?>" <?php echo $editRule && (int)$editRule['add_test_id'] === (int)$t['id'] ? 'selected' : ''; ?>>
                    <?php echo htmlspecialchars($t['name'] . ' (' . $t['test_code'] . ')', ENT_QUOTES, 'UTF-8'); ?>
                </option>
                <?php endforeach; ?>
            </select>
        </div>
        <div style="align-self:flex-end;">
            <label class="settings-checkbox">
                <input type="checkbox" name="is_active" value="1" <?php echo !$editRule || ($editRule['is_active'] ?? 1) ? 'checked' : ''; ?>>
                مفعّل
            </label>
        </div>
        <div class="form-actions" style="align-items:flex-end;">
            <button type="submit" class="btn-primary"><?php echo $editRule ? 'حفظ التعديلات' : 'إضافة القاعدة'; ?></button>
            <?php if ($editRule): ?>
            <a href="index.php?page=reflex_rules" class="btn-secondary">إلغاء</a>
            <?php endif; ?>
        </div>
    </form>
</div>

<!-- قائمة القواعد -->
<div class="card">
    <h3 style="margin-top:0;">القواعد المضافة</h3>
    <?php if (empty($rules)): ?>
    <p style="color:var(--text-muted);padding:24px;text-align:center;">لا توجد قواعد. أضف قاعدة جديدة أعلاه.</p>
    <?php else: ?>
    <div class="table-wrapper">
        <table class="table">
            <thead>
                <tr>
                    <th>الفحص المحفّز</th>
                    <th>الشرط</th>
                    <th>الفحص المضاف</th>
                    <th>الحالة</th>
                    <th>الإجراءات</th>
                </tr>
            </thead>
            <tbody>
                <?php foreach ($rules as $r): ?>
                <tr>
                    <td>
                        <strong><?php echo htmlspecialchars($r['trigger_name'], ENT_QUOTES, 'UTF-8'); ?></strong>
                        <span style="color:var(--text-muted);font-size:0.85rem;">(<?php echo htmlspecialchars($r['trigger_code'], ENT_QUOTES, 'UTF-8'); ?>)</span>
                    </td>
                    <td>
                        <?php echo htmlspecialchars($conditionLabels[$r['condition_type']] ?? $r['condition_type'], ENT_QUOTES, 'UTF-8'); ?>
                        <?php if (!empty($r['condition_value'])): ?>
                        <code><?php echo htmlspecialchars($r['condition_value'], ENT_QUOTES, 'UTF-8'); ?></code>
                        <?php endif; ?>
                    </td>
                    <td>
                        <strong><?php echo htmlspecialchars($r['add_name'], ENT_QUOTES, 'UTF-8'); ?></strong>
                        <span style="color:var(--text-muted);font-size:0.85rem;">(<?php echo htmlspecialchars($r['add_code'], ENT_QUOTES, 'UTF-8'); ?>)</span>
                    </td>
                    <td>
                        <span class="badge badge-<?php echo ($r['is_active'] ?? 1) ? 'completed' : 'cancelled'; ?>">
                            <?php echo ($r['is_active'] ?? 1) ? 'مفعّل' : 'معطّل'; ?>
                        </span>
                    </td>
                    <td>
                        <a href="index.php?page=reflex_rules&action=edit&id=<?php echo (int)$r['id']; ?>" class="btn-link">تعديل</a>
                        <a href="index.php?page=reflex_rules&action=delete&id=<?php echo (int)$r['id']; ?>" class="btn-link" style="color:var(--danger);" onclick="return confirm('حذف هذه القاعدة؟');">حذف</a>
                    </td>
                </tr>
                <?php endforeach; ?>
            </tbody>
        </table>
    </div>
    <?php endif; ?>
</div>
