<?php
require_once __DIR__ . '/../../config.php';
require_once __DIR__ . '/../../engine/Kernel.php';
require_once __DIR__ . '/../../engine/BillingEngine.php';
require_once __DIR__ . '/../../engine/UsageMeter.php';
$ctx = Kernel::handle(['auth' => true]);
$u   = $ctx['user'];
$action = $_GET['action'] ?? (($_SERVER['REQUEST_METHOD'] === 'GET') ? 'list' : 'ask');
$b      = json_decode(file_get_contents('php://input'), true) ?? [];
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($b['action'])) $action = $b['action'];

// ── قائمة الأعضاء ─────────────────────────────────────────────
if ($action === 'list') {
    $st = db()->prepare('SELECT * FROM family_members WHERE user_id = ? ORDER BY created_at');
    $st->execute([$u['id']]);
    json_response(['success' => true, 'members' => $st->fetchAll()]);
}

// ── إضافة عضو ─────────────────────────────────────────────────
if ($action === 'add') {
    $cnt = db()->prepare('SELECT COUNT(*) FROM family_members WHERE user_id = ?');
    $cnt->execute([$u['id']]);
    $limit = $u['subscription_tier'] === 'paid' ? 15 : FREE_FAMILY_MEMBERS;
    if ((int)$cnt->fetchColumn() >= $limit)
        json_response(['error' => 'limit_reached', 'message' => "الحد الأقصى $limit عضو — يمكنك الترقية للباقة المدفوعة"], 403);

    $name = mb_substr(trim($b['name'] ?? ''), 0, 100);
    if (!$name) Kernel::fail('name_required', '', 400);

    db()->prepare(
        'INSERT INTO family_members (user_id, name, relation, birth_date, blood_type, allergies, chronic, vaccines, notes)
         VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)'
    )->execute([
        $u['id'],
        $name,
        $b['relation']   ?? '',
        $b['birth_date'] ?? null,
        $b['blood_type'] ?? '',
        $b['allergies']  ?? '',
        $b['chronic']    ?? '',
        json_encode($b['vaccines'] ?? [], JSON_UNESCAPED_UNICODE),
        $b['notes']      ?? '',
    ]);

    $mid = (int)db()->lastInsertId();
    db()->prepare('UPDATE users SET points_family = points_family + 5 WHERE id = ?')->execute([$u['id']]);
    json_response(['success' => true, 'id' => $mid]);
}

// ── حذف عضو ───────────────────────────────────────────────────
if ($action === 'delete') {
    $id = (int)($b['id'] ?? 0);
    db()->prepare('DELETE FROM family_members WHERE id = ? AND user_id = ?')->execute([$id, $u['id']]);
    json_response(['success' => true]);
}

// ── ٤️⃣ مساعد الأسرة: سؤال طبي بالذكاء الاصطناعي مع سياق الأسرة كامل ──
if ($action === 'ask') {
    if (!check_rate_limit('family_ask_' . $u['id'], 20, 3600))
        Kernel::fail('rate_limit', 'حاول بعد قليل', 429);

    $q = mb_substr(trim($b['question'] ?? ''), 0, 500);
    if (!$q) Kernel::fail('question_required', '', 400);

    // جلب بيانات الأسرة كاملة من قاعدة البيانات
    $members_st = db()->prepare(
        'SELECT name, relation, birth_date, blood_type, allergies, chronic, vaccines
         FROM family_members WHERE user_id = ? LIMIT 10'
    );
    $members_st->execute([$u['id']]);
    $family_data = $members_st->fetchAll();

    // بناء سياق الأسرة بشكل منظّم
    $family_ctx = '';
    if (!empty($family_data)) {
        foreach ($family_data as $m) {
            $age_str     = '';
            $vaccines_arr = json_decode($m['vaccines'] ?: '[]', true);
            if ($m['birth_date']) {
                $age_years = floor((time() - strtotime($m['birth_date'])) / 31536000);
                $age_str   = $age_years < 1
                    ? floor((time() - strtotime($m['birth_date'])) / 2592000) . ' شهر'
                    : $age_years . ' سنة';
            }
            $family_ctx .= sprintf(
                "• %s (%s) — العمر: %s | فصيلة الدم: %s | حساسية: %s | أمراض مزمنة: %s | تطعيمات مكتملة: %s\n",
                $m['name'],
                $m['relation']  ?: 'غير محدد',
                $age_str        ?: 'غير محدد',
                $m['blood_type'] ?: 'غير محدد',
                $m['allergies'] ?: 'لا يوجد',
                $m['chronic']   ?: 'لا يوجد',
                !empty($vaccines_arr) ? implode(', ', $vaccines_arr) : 'لا شيء مسجّل'
            );
        }
    } else {
        $family_ctx = "لا توجد بيانات مسجّلة لأفراد الأسرة بعد.\n";
    }

    // ── System Prompt المتكامل لـ مساعد الأسرة مساعد الأسرة ──────────
    $system = <<<SYS
أنت مساعد مساعد الأسرة الطبي لمنصة سودانا — مرافق صحي ذكي للأسرة السودانية.

بيانات أسرة المستخدم المسجّلة:
$family_ctx
تعليمات الإجابة:
١. استخدم بيانات الأسرة أعلاه لتقديم نصيحة مخصصة ودقيقة لكل فرد.
٢. إذا كان هناك تعارض مع حساسية مسجّلة أو مرض مزمن — نبّه صراحةً.
٣. أسلوبك: سوداني ودود ومطمئن (استخدم "تمام العافية"، "أبشر"، "ما في داعي للقلق" عند الطمأنة).
٤. في الحالات الطارئة أو التي تستدعي تدخلاً عاجلاً — وجّه للطوارئ فوراً بوضوح.
٥. ختام كل رد يجب أن يتضمن: "⚕️ استشر طبيباً للتأكد" — لا تحذفها أبداً.
٦. لا تعطِ جرعات دوائية محددة أو تشخيصاً قاطعاً.
SYS;

    // AI_GUARD: daily limit check
    $_ai_plan = $u['plan_key'] ?? 'free';
    $_ai_limit = BillingEngine::checkAILimit((int)$u['id'], $_ai_plan);
    if (!empty($_ai_limit['exceeded'])) {
        json_response(['error'=>'daily_limit_exceeded','message'=>"تجاوزت حد {$_ai_limit['limit']} استدعاء/يوم",'used'=>$_ai_limit['used'],'limit'=>$_ai_limit['limit']], 429);
    }
    unset($_ai_plan, $_ai_limit);
    // ── P0 FIX: Safety evaluation before and after AI call ──────────
    // family context carries medical questions — must pass through SafetyEngine
    $safetyIn = SafetyEngine::evaluateInput($q, ['user' => $u]);
    if ($safetyIn['action'] === SafetyEngine::BLOCK) {
        SafetyEngine::logViolation((int)$u['id'], $q, $safetyIn['reason'] ?? 'family_block');
        json_response(['success' => false, 'answer' => 'لا يمكن معالجة هذا الطلب.'], 400);
    }
    if ($safetyIn['action'] === SafetyEngine::WARN) {
        // Emergency detected — return emergency response, skip AI
        json_response(['success' => true, 'answer' => SafetyEngine::emergencyResponse(), 'emergency' => true]);
    }

    $_um_fam = UsageMeter::wrap((int)$u['id'], 'chat', 'medical', fn() => AIClient::call($q, trim($system), 'auto', 450, 0.3, true), ['skip_debit' => true]);
    $answer = $_um_fam['ok'] ? ($_um_fam['result']['text'] ?? null) : null;

    // Safety evaluation on AI output (medical diagnosis check)
    if ($answer) {
        $safetyOut = SafetyEngine::evaluateOutput($answer, 'medical');
        if ($safetyOut['action'] === SafetyEngine::WARN && !empty($safetyOut['replace'])) {
            $answer = $safetyOut['replace'];
        } elseif ($safetyOut['action'] === SafetyEngine::BLOCK) {
            $answer = 'يُرجى استشارة طبيب مختص مباشرةً. ⚕️';
        }
    }

    Logger::info('family_ai_used', ['user_id' => (int)$u['id']]);

    json_response([
        'success' => true,
        'answer'  => $answer ?: 'عذراً، لم أتمكن من الإجابة الآن. يُرجى مراجعة طبيب مختص. ⚕️',
    ]);
}

// ── فحص التطعيمات ─────────────────────────────────────────────
if ($action === 'check_vaccines') {
    $members_st = db()->prepare('SELECT * FROM family_members WHERE user_id = ?');
    $members_st->execute([$u['id']]);
    $alerts = [];

    // جدول التطعيمات الأساسي للأطفال (بالأيام من الولادة)
    $schedule = [
        'BCG'          => 0,
        'OPV0'         => 0,
        'HepB'         => 0,
        'OPV1+Penta1'  => 42,
        'OPV2+Penta2'  => 70,
        'OPV3+Penta3'  => 98,
        'Measles'      => 270,
    ];

    foreach ($members_st->fetchAll() as $m) {
        if (!$m['birth_date']) continue;
        $age_days      = (int)((time() - strtotime($m['birth_date'])) / 86400);
        $vaccines_done = json_decode($m['vaccines'] ?: '[]', true);

        foreach ($schedule as $vac => $due_day) {
            if ($age_days >= $due_day && !in_array($vac, $vaccines_done)) {
                $overdue       = $age_days - $due_day;
                $alerts[] = [
                    'member'       => $m['name'],
                    'vaccine'      => $vac,
                    'overdue_days' => $overdue,
                    'urgent'       => $overdue > 30,
                ];
            }
        }
    }

    // إرسال إشعار FCM إذا وجدت تطعيمات متأخرة
    if (!empty($alerts)) {
        $fcm = get_user_token((int)$u['id']);
        if ($fcm) {
            $urgent_count  = count(array_filter($alerts, fn($a) => $a['urgent']));
            $push_body     = $urgent_count > 0
                ? "⚠️ $urgent_count تطعيم متأخر جداً — تفقّد التفاصيل الآن"
                : 'يوجد تطعيمات مستحقة لأفراد الأسرة — تفقّد التفاصيل';
            send_push($fcm, '💉 تنبيه تطعيم من مساعد الأسرة', $push_body, ['tag' => 'vaccine']);
        }
    }

    json_response([
        'success' => true,
        'alerts'  => $alerts,
        'count'   => count($alerts),
    ]);
}

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