<?php
require_once __DIR__ . '/../../config.php';
require_once __DIR__ . '/../../engine/Kernel.php';
require_once __DIR__ . '/../engine/Logger.php'; // COVERAGE
$ctx = Kernel::handle(['auth' => true]);
$u   = $ctx['user'];
$action = $u ? ($_GET['action'] ?? 'apply') : 'apply';
$b      = json_decode(file_get_contents('php://input'), true) ?? [];

// ── تقديم طلب الانضمام ────────────────────────────────────────
if ($action === 'apply') {
    if ($_SERVER['REQUEST_METHOD'] !== 'POST') Kernel::fail('method_not_allowed', '', 405);

    // فحص: هل لديه طلب معلق؟
    $existing = db()->prepare("SELECT id, status FROM provider_applications WHERE user_id = ? AND status IN ('pending','needs_docs') LIMIT 1");
    $existing->execute([$u['id']]);
    if ($existing->fetch()) Kernel::fail('application_exists', 'لديك طلب قيد المراجعة بالفعل', 409);

    $type      = $b['type'] ?? '';
    $specialty = mb_substr(trim($b['specialty'] ?? ''), 0, 200);
    $bio       = mb_substr(trim($b['bio'] ?? ''), 0, 1000);
    $license   = mb_substr(trim($b['license_number'] ?? ''), 0, 100);
    $authority = mb_substr(trim($b['issuing_authority'] ?? ''), 0, 200);

    $allowed_types = ['teacher','doctor','pharmacist','service_provider','academic','hospital'];
    if (!in_array($type, $allowed_types)) Kernel::fail('invalid_type', '', 400);
    if (!$specialty) Kernel::fail('specialty_required', 'التخصص مطلوب', 400);

    // رفع صورة الشهادة
    $credentials_url = null;
    if (!empty($b['credentials_base64'])) {
        // M5 FIX: Enforce 2MB upload limit (base64 ~1.33× size, so 2MB file ≈ 2.7MB base64)
        if (strlen($b['credentials_base64']) > 2800000) {
            Kernel::fail('file_too_large', 'حجم الصورة يتجاوز 2MB — يرجى ضغط الصورة أولاً', 400);
        }
        $credentials_url = save_uploaded_image($b['credentials_base64']);
        if (!$credentials_url)
            Kernel::fail('invalid_image', 'صورة الشهادة غير صالحة', 400);
    }

    db()->prepare(
        'INSERT INTO provider_applications (user_id, type, specialty, bio, credentials_url, license_number, issuing_authority)
         VALUES (?, ?, ?, ?, ?, ?, ?)'
    )->execute([$u['id'], $type, $specialty, $bio, $credentials_url, $license, $authority]);

    $app_id = (int)db()->lastInsertId();

    // إشعار للأدمن
    try {
        $type_ar = ['teacher'=>'معلم','doctor'=>'طبيب','pharmacist'=>'صيدلاني','service_provider'=>'مقدم خدمة','academic'=>'أكاديمي','hospital'=>'مستشفى/عيادة'];
        $admin_tokens = db()->query("SELECT DISTINCT d.fcm_token FROM user_devices d JOIN staff_members s ON s.id=d.user_id WHERE s.active=1 LIMIT 10")->fetchAll();
        foreach ($admin_tokens as $t) {
            send_push($t['fcm_token'], '📋 طلب مزود جديد', "طلب {$type_ar[$type]} جديد من {$u['name']}", ['tab' => 'providers']);
        }
    } catch (Throwable $ignored) {}

    // إشعار داخلي
    save_notification($u['id'], 'provider_applied', 'تم استلام طلبك', 'طلب انضمامك كمزود خدمة قيد المراجعة. سنتواصل معك خلال 48 ساعة.');

    json_response(['success' => true, 'id' => $app_id,
        'message' => 'تم استلام طلبك. سيراجعه فريقنا خلال 48 ساعة.',
        'onboarding' => [
            'welcome' => "🎉 أهلاً بك كمزود في سودانا!\n\nما يحدث الآن:\n1. مراجعة وثائقك ✅\n2. تفعيل بادج 'موثّق'\n3. ظهورك في نتائج البحث\n4. استقبال الحجوزات والاستشارات",
            'next_steps' => [
                'انتظر الموافقة خلال 48 ساعة',
                'بعد الموافقة: أضف خدماتك من لوحة التحكم',
                'شارك ملفك الشخصي مع عملائك',
            ],
            'tips' => 'المزودون الأوائل يحصلون على بادج مؤسس وأولوية في البحث! ⭐',
        ],
    ]);
}

// ── حالة طلبي ─────────────────────────────────────────────────
if ($action === 'status') {
    $st = db()->prepare("SELECT id, type, status, rejection_reason, created_at, reviewed_at FROM provider_applications WHERE user_id = ? ORDER BY id DESC LIMIT 1");
    $st->execute([$u['id']]);
    $app = $st->fetch();
    json_response(['success' => true, 'application' => $app ?: null,
        'is_provider' => !empty($u['user_type']) && $u['user_type'] !== 'user',
        'provider_verified' => (bool)$u['provider_verified'],
        'user_type' => $u['user_type'] ?? 'user',
    ]);
}

Kernel::fail('unknown_action', '', 400);
