<?php
/**
 * إدارة ربط API للعيادات - نسخة مطورة
 */
use App\Core\Auth;
use App\Core\Csrf;
use App\Core\Tenant;

$tenantId = Tenant::id();

if (!($auth instanceof Auth) || !$auth->can('integration.manage')) {
    http_response_code(403);
    echo 'غير مسموح بالوصول إلى هذه الصفحة';
    return;
}

// ملاحظة: لا ننفّذ migrations أثناء runtime.
// أي إضافة/تعديل schema يجب أن يمر عبر ملفات migrations الرسمية فقط.

$action = $_GET['action'] ?? 'index';
$msg = '';

// تعريف رابط API
$baseUrl = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https' : 'http') . '://' . ($_SERVER['HTTP_HOST'] ?? '') . dirname($_SERVER['SCRIPT_NAME'] ?? '');
if (substr($baseUrl, -1) !== '/') $baseUrl .= '/';
$apiUrl = $baseUrl . 'api/clinic_results.php';

// التحقق من وجود الأعمدة الجديدة
$hasNewColumns = false;
try {
    $stmt = $db->query("SHOW COLUMNS FROM clinic_api_keys LIKE 'ip_whitelist'");
    $hasNewColumns = $stmt->rowCount() > 0;
} catch (Throwable $e) {}

// إنشاء مفتاح جديد
if ($action === 'create' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    Csrf::enforce($_POST['_csrf'] ?? null);
    $name = trim($_POST['clinic_name'] ?? '');
    $ipWhitelist = trim($_POST['ip_whitelist'] ?? '');
    $rateLimit = !empty($_POST['rate_limit_per_hour']) ? (int)$_POST['rate_limit_per_hour'] : 100;
    $webhookUrl = trim($_POST['webhook_url'] ?? '');
    $notes = trim($_POST['notes'] ?? '');
    
    if ($name !== '') {
        $key = bin2hex(random_bytes(32));
        $webhookSecret = !empty($webhookUrl) ? bin2hex(random_bytes(16)) : null;
        
        if ($hasNewColumns) {
            try {
                $sql = 'INSERT INTO clinic_api_keys (clinic_name, api_key, tenant_id, ip_whitelist, rate_limit_per_hour, webhook_url, webhook_secret, notes) VALUES (?, ?, ?, ?, ?, ?, ?, ?)';
                $db->prepare($sql)->execute([
                    $name, $key, $tenantId,
                    $ipWhitelist ?: null,
                    $rateLimit,
                    $webhookUrl ?: null,
                    $webhookSecret,
                    $notes ?: null
                ]);
                $_SESSION['clinic_api_msg'] = 'تم إنشاء المفتاح بنجاح. احفظه الآن: ' . $key;
                $_SESSION['clinic_api_new_key'] = $key;
            } catch (Throwable $e) {
                try {
                    $sql = 'INSERT INTO clinic_api_keys (clinic_name, api_key, ip_whitelist, rate_limit_per_hour, webhook_url, webhook_secret, notes) VALUES (?, ?, ?, ?, ?, ?, ?)';
                    $db->prepare($sql)->execute([
                        $name, $key,
                        $ipWhitelist ?: null,
                        $rateLimit,
                        $webhookUrl ?: null,
                        $webhookSecret,
                        $notes ?: null
                    ]);
                    $_SESSION['clinic_api_msg'] = 'تم إنشاء المفتاح بنجاح. احفظه الآن: ' . $key;
                    $_SESSION['clinic_api_new_key'] = $key;
                } catch (Throwable $e2) {
                    $msg = 'خطأ في إنشاء المفتاح: ' . $e2->getMessage();
                }
            }
        } else {
            // استخدام SQL بسيط بدون الحقول الجديدة
            try {
                $sql = 'INSERT INTO clinic_api_keys (clinic_name, api_key, tenant_id) VALUES (?, ?, ?)';
                $db->prepare($sql)->execute([$name, $key, $tenantId]);
                $_SESSION['clinic_api_msg'] = 'تم إنشاء المفتاح بنجاح. احفظه الآن: ' . $key;
                $_SESSION['clinic_api_new_key'] = $key;
            } catch (Throwable $e) {
                try {
                    $sql = 'INSERT INTO clinic_api_keys (clinic_name, api_key) VALUES (?, ?)';
                    $db->prepare($sql)->execute([$name, $key]);
                    $_SESSION['clinic_api_msg'] = 'تم إنشاء المفتاح بنجاح. احفظه الآن: ' . $key;
                    $_SESSION['clinic_api_new_key'] = $key;
                } catch (Throwable $e2) {
                    $msg = 'خطأ في إنشاء المفتاح: ' . $e2->getMessage();
                }
            }
        }
        header('Location: index.php?page=clinic_api&created=1');
        exit;
    }
}

// تعديل مفتاح
if ($action === 'edit' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    Csrf::enforce($_POST['_csrf'] ?? null);
    $id = (int)($_POST['id'] ?? 0);
    if ($id > 0) {
        $name = trim($_POST['clinic_name'] ?? '');
        $ipWhitelist = trim($_POST['ip_whitelist'] ?? '');
        $rateLimit = !empty($_POST['rate_limit_per_hour']) ? (int)$_POST['rate_limit_per_hour'] : 100;
        $webhookUrl = trim($_POST['webhook_url'] ?? '');
        $notes = trim($_POST['notes'] ?? '');
        $isActive = isset($_POST['is_active']) ? 1 : 0;
        
        // التحقق من وجود الأعمدة الجديدة مرة أخرى
        $hasNewCols = false;
        try {
            $stmt = $db->query("SHOW COLUMNS FROM clinic_api_keys LIKE 'ip_whitelist'");
            $hasNewCols = $stmt->rowCount() > 0;
        } catch (Throwable $e) {}
        
        if ($hasNewCols) {
            // إنشاء webhook secret جديد إذا تم إضافة webhook URL ولم يكن موجوداً
            $webhookSecret = null;
            if (!empty($webhookUrl)) {
                try {
                    $stmt = $db->prepare('SELECT webhook_secret FROM clinic_api_keys WHERE id = ?');
                    $stmt->execute([$id]);
                    $existing = $stmt->fetch();
                    // إذا كان webhook URL موجوداً ولكن secret غير موجود، أنشئ واحداً جديداً
                    if (empty($existing['webhook_secret'])) {
                        $webhookSecret = bin2hex(random_bytes(16));
                    } else {
                        $webhookSecret = $existing['webhook_secret'];
                    }
                } catch (Throwable $e) {
                    $webhookSecret = bin2hex(random_bytes(16));
                }
            } else {
                // إذا تم حذف webhook URL، احذف secret أيضاً
                try {
                    $stmt = $db->prepare('SELECT webhook_secret FROM clinic_api_keys WHERE id = ?');
                    $stmt->execute([$id]);
                    $existing = $stmt->fetch();
                    // إذا كان secret موجوداً ولكن webhook URL فارغ، احذفه
                    if (!empty($existing['webhook_secret']) && empty($webhookUrl)) {
                        $webhookSecret = null;
                    }
                } catch (Throwable $e) {}
            }
            
            try {
                // التحقق من وجود عمود webhook_secret قبل استخدامه
                $hasWebhookSecret = false;
                try {
                    $stmt = $db->query("SHOW COLUMNS FROM clinic_api_keys LIKE 'webhook_secret'");
                    $hasWebhookSecret = $stmt->rowCount() > 0;
                } catch (Throwable $e) {}
                
                if ($hasWebhookSecret) {
                    $sql = 'UPDATE clinic_api_keys SET clinic_name=?, ip_whitelist=?, rate_limit_per_hour=?, webhook_url=?, webhook_secret=?, notes=?, is_active=? WHERE id=?';
                    $stmt = $db->prepare($sql);
                    $result = $stmt->execute([
                        $name,
                        $ipWhitelist ?: null,
                        $rateLimit,
                        $webhookUrl ?: null,
                        $webhookSecret,
                        $notes ?: null,
                        $isActive,
                        $id
                    ]);
                } else {
                    // بدون webhook_secret
                    $sql = 'UPDATE clinic_api_keys SET clinic_name=?, ip_whitelist=?, rate_limit_per_hour=?, webhook_url=?, notes=?, is_active=? WHERE id=?';
                    $stmt = $db->prepare($sql);
                    $result = $stmt->execute([
                        $name,
                        $ipWhitelist ?: null,
                        $rateLimit,
                        $webhookUrl ?: null,
                        $notes ?: null,
                        $isActive,
                        $id
                    ]);
                }
                
                if (!$result || $stmt->rowCount() === 0) {
                    throw new Exception('لم يتم تحديث أي سجل. تأكد من وجود المفتاح.');
                }
            } catch (Throwable $e) {
                // إذا فشل، حاول بدون الحقول الجديدة
                try {
                    $sql = 'UPDATE clinic_api_keys SET clinic_name=?, is_active=? WHERE id=?';
                    $stmt = $db->prepare($sql);
                    $result = $stmt->execute([$name, $isActive, $id]);
                    if (!$result || $stmt->rowCount() === 0) {
                        throw new Exception('فشل الحفظ: ' . $e->getMessage());
                    }
                } catch (Throwable $e2) {
                    $_SESSION['clinic_api_error'] = 'خطأ في حفظ التعديلات: ' . $e2->getMessage();
                    header('Location: index.php?page=clinic_api&action=edit&id=' . $id);
                    exit;
                }
            }
        } else {
            // استخدام SQL بسيط بدون الحقول الجديدة
            try {
                $sql = 'UPDATE clinic_api_keys SET clinic_name=?, is_active=? WHERE id=?';
                $db->prepare($sql)->execute([$name, $isActive, $id]);
            } catch (Throwable $e) {
                $sql = 'UPDATE clinic_api_keys SET clinic_name=? WHERE id=?';
                $db->prepare($sql)->execute([$name, $id]);
            }
        }
        
        if (isset($auditLog)) {
            $auditLog->log('clinic_api_updated', 'clinic_api_key', $id, null, json_encode(['clinic_name' => $name], JSON_UNESCAPED_UNICODE), $_SESSION['user_id'] ?? null);
        }
        
        $_SESSION['clinic_api_msg'] = 'تم حفظ التعديلات بنجاح.';
        header('Location: index.php?page=clinic_api&action=edit&id=' . $id . '&updated=1');
        exit;
    } else {
        $_SESSION['clinic_api_error'] = 'معرف المفتاح غير صحيح.';
        header('Location: index.php?page=clinic_api');
        exit;
    }
}

// حذف مفتاح
if ($action === 'delete' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    Csrf::enforce($_POST['_csrf'] ?? null);
    $id = (int)($_POST['id'] ?? 0);
    if ($id > 0) {
        $db->prepare('DELETE FROM clinic_api_keys WHERE id = ?')->execute([$id]);
        header('Location: index.php?page=clinic_api&deleted=1');
        exit;
    }
}

// إعادة توليد مفتاح
if ($action === 'regenerate' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    Csrf::enforce($_POST['_csrf'] ?? null);
    $id = (int)($_POST['id'] ?? 0);
    if ($id > 0) {
        $newKey = bin2hex(random_bytes(32));
        $db->prepare('UPDATE clinic_api_keys SET api_key = ? WHERE id = ?')->execute([$newKey, $id]);
        $_SESSION['clinic_api_msg'] = 'تم إعادة توليد المفتاح: ' . $newKey;
        $_SESSION['clinic_api_new_key'] = $newKey;
        header('Location: index.php?page=clinic_api&regenerated=1');
        exit;
    }
}

// عرض نموذج الإضافة
if ($action === 'create') {
    ?>
    <div class="page-header">
        <h1>إضافة مفتاح API جديد</h1>
    </div>
    <div class="card">
        <form method="post" class="form-grid">
        <input type="hidden" name="_csrf" value="<?php echo htmlspecialchars(Csrf::token(), ENT_QUOTES, 'UTF-8'); ?>">
        <div class="full-width">
            <label>اسم العيادة <span style="color:red;">*</span></label>
            <input type="text" name="clinic_name" required placeholder="مثال: عيادة النور">
        </div>
        <?php if ($hasNewColumns): ?>
        <div class="full-width">
            <label>قائمة IPs المسموحة (اختياري)</label>
            <input type="text" name="ip_whitelist" placeholder="192.168.1.1, 10.0.0.1 (مفصولة بفواصل)">
            <small style="color:var(--text-muted);">اتركه فارغاً للسماح لجميع IPs</small>
        </div>
        <div>
            <label>حد الطلبات في الساعة</label>
            <input type="number" name="rate_limit_per_hour" value="100" min="1" max="10000">
        </div>
        <div class="full-width">
            <label>رابط Webhook (اختياري)</label>
            <input type="url" name="webhook_url" placeholder="https://clinic.example.com/webhook">
            <small style="color:var(--text-muted);">سيتم إرسال النتائج تلقائياً لهذا الرابط</small>
        </div>
        <div class="full-width">
            <label>ملاحظات</label>
            <textarea name="notes" rows="3" placeholder="ملاحظات إضافية"></textarea>
        </div>
        <?php endif; ?>
            <div class="full-width form-actions">
                <button type="submit" class="btn-primary">إنشاء المفتاح</button>
                <a href="index.php?page=clinic_api" class="btn-secondary">رجوع</a>
            </div>
        </form>
    </div>
    <?php
    return;
}

// عرض نموذج التعديل
if ($action === 'edit') {
    $id = (int)($_GET['id'] ?? 0);
    if ($id <= 0) {
        header('Location: index.php?page=clinic_api');
        exit;
    }
    
    try {
        $stmt = $db->prepare('SELECT * FROM clinic_api_keys WHERE id = ? AND (tenant_id = ? OR tenant_id IS NULL)');
        $stmt->execute([$id, $tenantId]);
        $key = $stmt->fetch();
    } catch (Throwable $e) {
        $stmt = $db->prepare('SELECT * FROM clinic_api_keys WHERE id = ?');
        $stmt->execute([$id]);
        $key = $stmt->fetch();
    }
    
    if (!$key) {
        header('Location: index.php?page=clinic_api');
        exit;
    }
    ?>
    <div class="page-header">
        <h1>تعديل مفتاح API: <?php echo htmlspecialchars($key['clinic_name'], ENT_QUOTES, 'UTF-8'); ?></h1>
    </div>
    <?php if (!empty($_SESSION['clinic_api_error'])): ?>
    <div class="alert alert-danger" style="margin-bottom:16px;">
        <?php echo htmlspecialchars($_SESSION['clinic_api_error'], ENT_QUOTES, 'UTF-8'); unset($_SESSION['clinic_api_error']); ?>
    </div>
    <?php endif; ?>
    <?php if (isset($_GET['updated'])): ?>
    <div class="alert alert-success" style="margin-bottom:16px;">
        تم حفظ التعديلات بنجاح.
    </div>
    <?php endif; ?>
    <div class="card">
        <form method="post" action="index.php?page=clinic_api&action=edit&id=<?php echo (int)$key['id']; ?>" class="form-grid" onsubmit="this.querySelector('button[type=submit]').disabled=true; this.querySelector('button[type=submit]').textContent='جاري الحفظ...';">
            <input type="hidden" name="id" value="<?php echo (int)$key['id']; ?>">
            <input type="hidden" name="_csrf" value="<?php echo htmlspecialchars(Csrf::token(), ENT_QUOTES, 'UTF-8'); ?>">
            <div class="full-width">
                <label>اسم العيادة <span style="color:red;">*</span></label>
                <input type="text" name="clinic_name" required value="<?php echo htmlspecialchars($key['clinic_name'], ENT_QUOTES, 'UTF-8'); ?>">
            </div>
            <div class="full-width">
                <label>المفتاح</label>
                <div style="display:flex;gap:8px;align-items:center;flex-wrap:wrap;">
                    <code style="flex:1;min-width:200px;padding:10px;background:var(--bg-secondary);border-radius:4px;word-break:break-all;font-size:0.9rem;"><?php echo htmlspecialchars($key['api_key'], ENT_QUOTES, 'UTF-8'); ?></code>
                    <button type="button" onclick="navigator.clipboard.writeText('<?php echo htmlspecialchars($key['api_key'], ENT_QUOTES, 'UTF-8'); ?>'); alert('تم نسخ المفتاح!');" class="btn-secondary" style="white-space:nowrap;">📋 نسخ</button>
                    <form method="post" action="index.php?page=clinic_api&action=regenerate" style="display:inline;" onsubmit="return confirm('⚠️ تحذير: إعادة توليد المفتاح؟\n\nسيحتاج العيادة لتحديث المفتاح في نظامها.\n\nهل أنت متأكد؟');">
                        <input type="hidden" name="_csrf" value="<?php echo htmlspecialchars(Csrf::token(), ENT_QUOTES, 'UTF-8'); ?>">
                        <input type="hidden" name="id" value="<?php echo (int)$key['id']; ?>">
                        <button type="submit" class="btn-secondary" style="white-space:nowrap;">🔄 إعادة توليد</button>
                    </form>
                </div>
            </div>
            <?php if ($hasNewColumns): ?>
            <div class="full-width">
                <label>قائمة IPs المسموحة</label>
                <input type="text" name="ip_whitelist" value="<?php echo htmlspecialchars($key['ip_whitelist'] ?? '', ENT_QUOTES, 'UTF-8'); ?>" placeholder="192.168.1.1, 10.0.0.1">
                <small style="color:var(--text-muted);display:block;margin-top:4px;">اتركه فارغاً للسماح لجميع IPs. استخدم فاصلة لفصل عناوين IP متعددة.</small>
            </div>
            <div>
                <label>حد الطلبات في الساعة</label>
                <input type="number" name="rate_limit_per_hour" value="<?php echo (int)($key['rate_limit_per_hour'] ?? 100); ?>" min="1" max="10000" step="1">
                <small style="color:var(--text-muted);display:block;margin-top:4px;">الحد الأقصى لعدد الطلبات في الساعة الواحدة</small>
            </div>
            <div class="full-width">
                <label>رابط Webhook</label>
                <input type="url" name="webhook_url" value="<?php echo htmlspecialchars($key['webhook_url'] ?? '', ENT_QUOTES, 'UTF-8'); ?>" placeholder="https://clinic.example.com/webhook">
                <small style="color:var(--text-muted);display:block;margin-top:4px;">سيتم إرسال النتائج تلقائياً لهذا الرابط عند اكتمالها</small>
            </div>
            <?php if (!empty($key['webhook_secret'])): ?>
            <div class="full-width">
                <label>Webhook Secret</label>
                <div style="display:flex;gap:8px;align-items:center;">
                    <code style="flex:1;padding:10px;background:var(--bg-secondary);border-radius:4px;word-break:break-all;font-size:0.9rem;"><?php echo htmlspecialchars($key['webhook_secret'], ENT_QUOTES, 'UTF-8'); ?></code>
                    <button type="button" onclick="navigator.clipboard.writeText('<?php echo htmlspecialchars($key['webhook_secret'], ENT_QUOTES, 'UTF-8'); ?>'); alert('تم نسخ Secret!');" class="btn-secondary">📋</button>
                </div>
                <small style="color:var(--text-muted);display:block;margin-top:4px;">استخدم هذا المفتاح للتحقق من صحة الطلبات الواردة من webhook</small>
            </div>
            <?php endif; ?>
            <div class="full-width">
                <label>ملاحظات</label>
                <textarea name="notes" rows="4" placeholder="ملاحظات إضافية حول هذا المفتاح..."><?php echo htmlspecialchars($key['notes'] ?? '', ENT_QUOTES, 'UTF-8'); ?></textarea>
            </div>
            <?php endif; ?>
            <div class="full-width">
                <label style="display:flex;align-items:center;gap:8px;cursor:pointer;">
                    <input type="checkbox" name="is_active" <?php echo ($key['is_active'] ?? 1) ? 'checked' : ''; ?> style="cursor:pointer;">
                    <span>المفتاح نشط</span>
                </label>
                <small style="color:var(--text-muted);display:block;margin-top:4px;">عطّل المفتاح لمنع استخدامه مؤقتاً</small>
            </div>
            <div class="full-width form-actions" style="margin-top:24px;padding-top:16px;border-top:1px solid var(--border-color);">
                <button type="submit" class="btn-primary" style="min-width:120px;">💾 حفظ التعديلات</button>
                <a href="index.php?page=clinic_api&action=view&id=<?php echo (int)$key['id']; ?>" class="btn-secondary">👁️ عرض التفاصيل</a>
                <a href="index.php?page=clinic_api" class="btn-secondary">← رجوع</a>
            </div>
        </form>
    </div>
    <?php
    return;
}

// عرض سجل API
if ($action === 'logs') {
    $keyId = (int)($_GET['key_id'] ?? 0);
    $page = max(1, (int)($_GET['p'] ?? 1));
    $perPage = 50;
    $offset = ($page - 1) * $perPage;
    
    $logs = [];
    $total = 0;
    
    try {
        $where = $keyId > 0 ? 'WHERE api_key_id = ?' : '';
        $params = $keyId > 0 ? [$keyId] : [];
        
        $lim = max(1, min(200, (int)$perPage));
        $off = max(0, (int)$offset);
        $stmt = $db->prepare("SELECT * FROM clinic_api_logs $where ORDER BY created_at DESC LIMIT {$lim} OFFSET {$off}");
        $stmt->execute($params);
        $logs = $stmt->fetchAll();
        
        $stmt = $db->prepare("SELECT COUNT(*) FROM clinic_api_logs $where");
        $stmt->execute($params);
        $total = (int)$stmt->fetchColumn();
    } catch (Throwable $e) {
        // الجدول قد لا يكون موجوداً بعد
    }
    
    ?>
    <div class="page-header">
        <h1>سجل طلبات API</h1>
        <div class="actions-bar">
            <a href="index.php?page=clinic_api" class="btn-secondary">رجوع</a>
        </div>
    </div>
    <?php if (empty($logs)): ?>
    <div class="card">
        <p style="text-align:center;color:var(--text-muted);padding:24px;">لا توجد سجلات</p>
    </div>
    <?php else: ?>
    <div class="table-wrapper">
        <table class="table">
            <thead>
                <tr>
                    <th>التاريخ</th>
                    <th>العيادة</th>
                    <th>الطريقة</th>
                    <th>IP</th>
                    <th>الحالة</th>
                    <th>الوقت (ms)</th>
                    <th>تفاصيل</th>
                </tr>
            </thead>
            <tbody>
                <?php foreach ($logs as $log): ?>
                <tr>
                    <td><?php echo date('Y-m-d H:i:s', strtotime($log['created_at'])); ?></td>
                    <td><?php echo htmlspecialchars($log['clinic_name'], ENT_QUOTES, 'UTF-8'); ?></td>
                    <td><?php echo htmlspecialchars($log['request_method'], ENT_QUOTES, 'UTF-8'); ?></td>
                    <td><?php echo htmlspecialchars($log['ip_address'] ?? '-', ENT_QUOTES, 'UTF-8'); ?></td>
                    <td>
                        <?php if ($log['response_status']): ?>
                            <span class="badge badge-<?php echo $log['response_status'] < 400 ? 'completed' : 'cancelled'; ?>">
                                <?php echo $log['response_status']; ?>
                            </span>
                        <?php else: ?>
                            <span class="badge badge-cancelled">خطأ</span>
                        <?php endif; ?>
                    </td>
                    <td><?php echo $log['execution_time_ms'] ?? '-'; ?></td>
                    <td>
                        <?php if ($log['error_message']): ?>
                            <span style="color:var(--danger);" title="<?php echo htmlspecialchars($log['error_message'], ENT_QUOTES, 'UTF-8'); ?>">⚠️</span>
                        <?php endif; ?>
                    </td>
                </tr>
                <?php endforeach; ?>
            </tbody>
        </table>
    </div>
    <?php endif; ?>
    <?php
    return;
}

// صفحة وثائق API
if ($action === 'docs') {
    ?>
    <div class="page-header">
        <h1>وثائق API للعيادات</h1>
        <div class="actions-bar">
            <a href="index.php?page=clinic_api" class="btn-secondary">رجوع</a>
        </div>
    </div>
    
    <div class="card" style="margin-bottom:16px;">
        <h2>المقدمة</h2>
        <p>API للعيادات يسمح للعيادات بالحصول على نتائج التحاليل تلقائياً. يدعم API طلبات GET و POST.</p>
    </div>
    
    <div class="card" style="margin-bottom:16px;">
        <h2>المصادقة</h2>
        <p>جميع الطلبات تتطلب مفتاح API صالح عبر Header <code>X-API-Key</code> (أو <code>Authorization: Bearer ...</code>).</p>
        <pre style="background:var(--bg-secondary);padding:12px;border-radius:4px;overflow-x:auto;"><code><?php echo htmlspecialchars("GET {$apiUrl}?order_number=O12345\nX-API-Key: YOUR_API_KEY", ENT_QUOTES, 'UTF-8'); ?></code></pre>
    </div>
    
    <div class="card" style="margin-bottom:16px;">
        <h2>Endpoints</h2>
        
        <h3>1. الحصول على النتائج برقم الطلب</h3>
        <pre style="background:var(--bg-secondary);padding:12px;border-radius:4px;overflow-x:auto;"><code><?php echo htmlspecialchars("GET {$apiUrl}?order_number=O12345\nX-API-Key: XXX", ENT_QUOTES, 'UTF-8'); ?></code></pre>
        
        <h3>2. الحصول على النتائج برقم الطلب (ID)</h3>
        <pre style="background:var(--bg-secondary);padding:12px;border-radius:4px;overflow-x:auto;"><code><?php echo htmlspecialchars("GET {$apiUrl}?order_id=123\nX-API-Key: XXX", ENT_QUOTES, 'UTF-8'); ?></code></pre>
        
        <h3>3. الحصول على آخر نتائج للمريض</h3>
        <pre style="background:var(--bg-secondary);padding:12px;border-radius:4px;overflow-x:auto;"><code><?php echo htmlspecialchars("GET {$apiUrl}?patient_id=456\nX-API-Key: XXX", ENT_QUOTES, 'UTF-8'); ?></code></pre>
        
        <h3>4. استخدام POST</h3>
        <pre style="background:var(--bg-secondary);padding:12px;border-radius:4px;overflow-x:auto;"><code><?php echo htmlspecialchars("POST {$apiUrl}\nContent-Type: application/json\nX-API-Key: XXX\n\n{\n  \"order_number\": \"O12345\"\n}", ENT_QUOTES, 'UTF-8'); ?></code></pre>
    </div>
    
    <div class="card" style="margin-bottom:16px;">
        <h2>الاستجابة</h2>
        <p>الاستجابة تكون بصيغة JSON:</p>
        <pre style="background:var(--bg-secondary);padding:12px;border-radius:4px;overflow-x:auto;"><code><?php echo htmlspecialchars(json_encode([
            'success' => true,
            'data' => [
                'order' => [
                    'id' => 123,
                    'order_number' => 'O12345',
                    'order_date' => '2026-02-18 10:30:00',
                    'status' => 'completed',
                    'patient_name' => 'أحمد محمد',
                    'phone' => '0501234567',
                    'doctor_name' => 'د. سعيد'
                ],
                'results' => [
                    [
                        'test_name' => 'سكر الدم',
                        'result_value' => '95',
                        'unit' => 'mg/dL',
                        'reference_range' => '70-100',
                        'flag' => 'N'
                    ]
                ]
            ]
        ], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), ENT_QUOTES, 'UTF-8'); ?></code></pre>
    </div>
    
    <div class="card" style="margin-bottom:16px;">
        <h2>أخطاء محتملة</h2>
        <ul>
            <li><code>{"success": false, "error": "api_key مطلوب"}</code> - لم يتم تمرير المفتاح في Header</li>
            <li><code>{"success": false, "error": "مفتاح API غير صالح"}</code> - المفتاح غير صحيح أو معطّل</li>
            <li><code>{"success": false, "error": "حدد order_id أو order_number أو patient_id"}</code> - لم يتم تحديد معامل البحث</li>
            <li><code>{"success": false, "error": "IP غير مسموح"}</code> - IP غير موجود في القائمة البيضاء</li>
            <li><code>{"success": false, "error": "تم تجاوز حد الطلبات"}</code> - تم تجاوز حد الطلبات في الساعة</li>
        </ul>
    </div>
    
    <div class="card">
        <h2>Webhooks</h2>
        <p>يمكنك تفعيل Webhooks لإرسال النتائج تلقائياً للعيادة عند اكتمالها.</p>
        <p>سيتم إرسال POST request للرابط المحدد مع التوقيع في header <code>X-Webhook-Signature</code>.</p>
        <p><strong>ربط الطلب:</strong> من تفاصيل الطلب في «الطلبات»، اختر مفتاح العيادة ليُرسل الإشعار عند اكتمال النتائج.</p>
    </div>

    <div class="card" style="margin-top:16px;">
        <h2>جسر JSON (FHIR-like)</h2>
        <p>استجابة <code>Bundle</code> مبسّطة للتكامل:</p>
        <pre style="background:var(--bg-secondary);padding:12px;border-radius:4px;overflow-x:auto;"><code>GET <?php echo htmlspecialchars(dirname($apiUrl) . '/integration_bridge.php', ENT_QUOTES, 'UTF-8'); ?>?order_number=...
X-API-Key: YOUR_KEY</code></pre>
    </div>
    <?php
    return;
}

// أداة اختبار API
if ($action === 'test') {
    $testApiKey = $_GET['test_api_key'] ?? '';
    $testOrderNumber = $_GET['test_order_number'] ?? '';
    $testResult = null;
    
    if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['test_api'])) {
        Csrf::enforce($_POST['_csrf'] ?? null);
        $testApiKey = trim($_POST['api_key'] ?? '');
        $testOrderNumber = trim($_POST['order_number'] ?? '');
        $testPatientId = !empty($_POST['patient_id']) ? (int)$_POST['patient_id'] : 0;
        $testOrderId = !empty($_POST['order_id']) ? (int)$_POST['order_id'] : 0;
        
        if ($testApiKey) {
            $url = $apiUrl;
            $query = [];
            if ($testOrderId > 0) {
                $query['order_id'] = $testOrderId;
            } elseif ($testOrderNumber) {
                $query['order_number'] = $testOrderNumber;
            } elseif ($testPatientId > 0) {
                $query['patient_id'] = $testPatientId;
            }
            if (!empty($query)) {
                $url .= '?' . http_build_query($query);
            }
            
            $ch = curl_init($url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_TIMEOUT, 10);
            curl_setopt($ch, CURLOPT_HTTPHEADER, ['X-API-Key: ' . $testApiKey]);
            $response = curl_exec($ch);
            $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
            curl_close($ch);
            
            $testResult = [
                'url' => $url,
                'auth_header' => 'X-API-Key: ***',
                'http_code' => $httpCode,
                'response' => json_decode($response, true) ?: $response
            ];
        }
    }
    ?>
    <div class="page-header">
        <h1>اختبار API</h1>
        <div class="actions-bar">
            <a href="index.php?page=clinic_api" class="btn-secondary">رجوع</a>
        </div>
    </div>
    
    <div class="card">
        <form method="post" class="form-grid">
            <input type="hidden" name="test_api" value="1">
            <input type="hidden" name="_csrf" value="<?php echo htmlspecialchars(Csrf::token(), ENT_QUOTES, 'UTF-8'); ?>">
            <div class="full-width">
                <label>مفتاح API <span style="color:red;">*</span></label>
                <input type="text" name="api_key" required value="<?php echo htmlspecialchars($testApiKey, ENT_QUOTES, 'UTF-8'); ?>" placeholder="أدخل مفتاح API">
            </div>
            <div>
                <label>رقم الطلب</label>
                <input type="text" name="order_number" value="<?php echo htmlspecialchars($testOrderNumber, ENT_QUOTES, 'UTF-8'); ?>" placeholder="O12345">
            </div>
            <div>
                <label>ID الطلب</label>
                <input type="number" name="order_id" placeholder="123">
            </div>
            <div>
                <label>ID المريض</label>
                <input type="number" name="patient_id" placeholder="456">
            </div>
            <div class="full-width form-actions">
                <button type="submit" class="btn-primary">🚀 اختبار API</button>
            </div>
        </form>
    </div>
    
    <?php if ($testResult): ?>
    <div class="card" style="margin-top:16px;">
        <h3>النتيجة</h3>
        <p><strong>URL:</strong> <code><?php echo htmlspecialchars($testResult['url'], ENT_QUOTES, 'UTF-8'); ?></code></p>
        <p><strong>HTTP Code:</strong> <span class="badge badge-<?php echo $testResult['http_code'] < 400 ? 'completed' : 'cancelled'; ?>"><?php echo $testResult['http_code']; ?></span></p>
        <p><strong>الاستجابة:</strong></p>
        <pre style="background:var(--bg-secondary);padding:12px;border-radius:4px;overflow-x:auto;max-height:400px;overflow-y:auto;"><code><?php echo htmlspecialchars(json_encode($testResult['response'], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), ENT_QUOTES, 'UTF-8'); ?></code></pre>
    </div>
    <?php endif; ?>
    <?php
    return;
}

// قائمة المفاتيح
$keys = [];
try {
    // محاولة استخدام SQL مع الحقول الجديدة
    if ($hasNewColumns) {
        try {
            $stmt = $db->prepare('SELECT k.*, 
                (SELECT COUNT(*) FROM clinic_api_logs l WHERE l.api_key_id = k.id) AS logs_count,
                (SELECT COUNT(*) FROM clinic_api_logs l WHERE l.api_key_id = k.id AND DATE(l.created_at) = CURDATE()) AS today_count
                FROM clinic_api_keys k 
                WHERE k.tenant_id = ? OR k.tenant_id IS NULL 
                ORDER BY k.id DESC');
            $stmt->execute([$tenantId]);
            $keys = $stmt->fetchAll();
        } catch (Throwable $e) {
            $stmt = $db->query('SELECT * FROM clinic_api_keys ORDER BY id DESC');
            $keys = $stmt->fetchAll();
        }
    } else {
        // استخدام SQL بسيط
        try {
            $stmt = $db->prepare('SELECT * FROM clinic_api_keys WHERE tenant_id = ? OR tenant_id IS NULL ORDER BY id DESC');
            $stmt->execute([$tenantId]);
            $keys = $stmt->fetchAll();
        } catch (Throwable $e) {
            $stmt = $db->query('SELECT * FROM clinic_api_keys ORDER BY id DESC');
            $keys = $stmt->fetchAll();
        }
    }
} catch (Throwable $e) {
    $keys = [];
}

if (isset($_GET['created'])) $msg = 'تم إنشاء المفتاح بنجاح.';
if (isset($_GET['updated'])) $msg = 'تم تحديث المفتاح بنجاح.';
if (isset($_GET['deleted'])) $msg = 'تم حذف المفتاح بنجاح.';
if (isset($_GET['regenerated'])) $msg = 'تم إعادة توليد المفتاح بنجاح.';
if (!empty($_SESSION['clinic_api_msg'])) {
    $msg = $_SESSION['clinic_api_msg'];
    unset($_SESSION['clinic_api_msg']);
}
?>
<div class="page-header page-header--stack">
    <div class="page-header-top">
        <h1>API العيادات</h1>
        <div class="actions-bar">
            <a href="index.php?page=clinic_api&action=logs" class="btn-secondary">📋 سجل الطلبات</a>
            <a href="index.php?page=clinic_api&action=docs" class="btn-secondary">📖 وثائق API</a>
            <a href="index.php?page=clinic_api&action=test" class="btn-secondary">🧪 اختبار API</a>
            <a href="index.php?page=clinic_api&action=create" class="btn-primary">➕ مفتاح جديد</a>
        </div>
    </div>
    <p class="page-header-desc">مفاتيح API للعيادات لجلب النتائج وربط الطلبات؛ يمكن ضبط webhook عند اكتمال الطلب واستخدام جسر التكامل من الوثائق.</p>
    <nav class="lab-quick-nav" aria-label="اختصارات ذات صلة">
        <a href="index.php?page=integration">تكامل الأجهزة</a>
        <?php if ($auth->can('orders.view')): ?><a href="index.php?page=orders">طلبات الفحوصات</a><?php endif; ?>
        <?php if ($auth->can('results.edit') || $auth->can('results.validate')): ?><a href="index.php?page=import_results">استيراد نتائج</a><?php endif; ?>
    </nav>
</div>

<?php if ($msg): ?>
<div class="alert alert-<?php echo strpos($msg, 'خطأ') !== false ? 'danger' : 'success'; ?>" style="margin-bottom:16px;">
    <?php echo htmlspecialchars($msg, ENT_QUOTES, 'UTF-8'); ?>
    <?php if (!empty($_SESSION['clinic_api_new_key'])): ?>
        <div style="margin-top:12px;padding:12px;background:var(--bg-secondary);border-radius:4px;">
            <strong>المفتاح الجديد:</strong>
            <code style="display:block;margin-top:8px;padding:8px;background:white;border-radius:4px;word-break:break-all;">
                <?php echo htmlspecialchars($_SESSION['clinic_api_new_key'], ENT_QUOTES, 'UTF-8'); ?>
            </code>
            <button onclick="navigator.clipboard.writeText('<?php echo htmlspecialchars($_SESSION['clinic_api_new_key'], ENT_QUOTES, 'UTF-8'); ?>'); alert('تم النسخ!');" class="btn-secondary" style="margin-top:8px;">📋 نسخ</button>
        </div>
        <?php unset($_SESSION['clinic_api_new_key']); ?>
    <?php endif; ?>
</div>
<?php endif; ?>

<div class="card" style="margin-bottom:24px;">
    <h3 style="margin-top:0;">معلومات API</h3>
    <p><strong>رابط API:</strong> <code><?php echo htmlspecialchars($apiUrl, ENT_QUOTES, 'UTF-8'); ?></code></p>
    <p><strong>الطريقة:</strong> GET أو POST</p>
    <p><strong>التنسيق:</strong> JSON</p>
    <details style="margin-top:12px;">
        <summary style="cursor:pointer;color:var(--primary);">📖 مثال على الاستخدام</summary>
        <div style="margin-top:8px;padding:12px;background:var(--bg-secondary);border-radius:4px;">
            <pre style="margin:0;overflow-x:auto;"><code><?php echo htmlspecialchars("GET {$apiUrl}?order_number=O12345\nX-API-Key: YOUR_KEY\n\nأو\n\nGET {$apiUrl}?patient_id=123\nX-API-Key: YOUR_KEY", ENT_QUOTES, 'UTF-8'); ?></code></pre>
        </div>
    </details>
</div>

<div class="table-wrapper">
<table class="table">
    <thead>
        <tr>
            <th>العيادة</th>
            <th>المفتاح</th>
            <th>الطلبات</th>
            <th>اليوم</th>
            <th>آخر استخدام</th>
            <th>الحالة</th>
            <th>إجراءات</th>
        </tr>
    </thead>
    <tbody>
    <?php if (empty($keys)): ?>
        <tr><td colspan="7" style="text-align:center;padding:24px;color:var(--text-muted);">لا توجد مفاتيح API</td></tr>
    <?php else: ?>
    <?php foreach ($keys as $k): ?>
        <tr>
            <td><strong><?php echo htmlspecialchars($k['clinic_name'], ENT_QUOTES, 'UTF-8'); ?></strong></td>
            <td>
                <code style="font-size:0.85rem;"><?php echo htmlspecialchars(substr($k['api_key'], 0, 16) . '...', ENT_QUOTES, 'UTF-8'); ?></code>
                <button onclick="navigator.clipboard.writeText('<?php echo htmlspecialchars($k['api_key'], ENT_QUOTES, 'UTF-8'); ?>'); alert('تم النسخ!');" style="margin-left:4px;padding:2px 6px;font-size:0.75rem;">📋</button>
            </td>
            <td><?php echo $hasNewColumns ? number_format((int)($k['request_count'] ?? 0)) : '-'; ?></td>
            <td><?php echo $hasNewColumns ? (int)($k['today_count'] ?? 0) : '-'; ?></td>
            <td><?php echo ($hasNewColumns && $k['last_used_at']) ? date('Y-m-d H:i', strtotime($k['last_used_at'])) : 'لم يُستخدم'; ?></td>
            <td>
                <span class="badge badge-<?php echo ($k['is_active'] ?? 1) ? 'completed' : 'cancelled'; ?>">
                    <?php echo ($k['is_active'] ?? 1) ? 'نشط' : 'معطّل'; ?>
                </span>
            </td>
            <td>
                <a href="index.php?page=clinic_api&action=edit&id=<?php echo (int)$k['id']; ?>" class="btn-link" title="تعديل">✏️</a>
                <a href="index.php?page=clinic_api&action=logs&key_id=<?php echo (int)$k['id']; ?>" class="btn-link" title="السجل">📋</a>
                <form method="post" action="index.php?page=clinic_api&action=delete" style="display:inline;" onsubmit="return confirm('حذف هذا المفتاح؟');">
                    <input type="hidden" name="_csrf" value="<?php echo htmlspecialchars(Csrf::token(), ENT_QUOTES, 'UTF-8'); ?>">
                    <input type="hidden" name="id" value="<?php echo (int)$k['id']; ?>">
                    <button type="submit" class="btn-link" style="color:#dc2626;" title="حذف">🗑️</button>
                </form>
            </td>
        </tr>
    <?php endforeach; ?>
    <?php endif; ?>
    </tbody>
</table>
</div>
