<?php
declare(strict_types=1);
set_time_limit(0);

$pdo = new PDO('mysql:host=db;dbname=db;charset=utf8mb4', 'db', 'db');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec('SET NAMES utf8mb4');

$now = time();
function uuid(): string {
    return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
        mt_rand(0,0xffff),mt_rand(0,0xffff),mt_rand(0,0xffff),
        mt_rand(0,0x0fff)|0x4000,mt_rand(0,0x3fff)|0x8000,
        mt_rand(0,0xffff),mt_rand(0,0xffff),mt_rand(0,0xffff));
}
function ri(array $a) { return $a[array_rand($a)]; }
function wRand(array $items, array $weights): mixed {
    $total = array_sum($weights); $r = rand(1, $total); $c = 0;
    foreach ($items as $k => $v) { $c += $weights[$k]; if ($r <= $c) return $v; }
    return $items[0];
}

// Load existing IDs
$doctorIds  = $pdo->query('SELECT id FROM doctors')->fetchAll(PDO::FETCH_COLUMN);
$patientIds = $pdo->query("SELECT id FROM users WHERE roles NOT LIKE '%ROLE_DOCTOR%' AND roles NOT LIKE '%ROLE_ADMIN%'")->fetchAll(PDO::FETCH_COLUMN);
echo 'Doctors: ' . count($doctorIds) . ', Patients: ' . count($patientIds) . "\n";

// ── Ratings ───────────────────────────────────────────────────────────────────
echo "Inserting ratings...\n";
$rateStmt  = $pdo->prepare('INSERT INTO rates (uuid,score,created_at,updated_at,user_id,doctor_id) VALUES (?,?,?,?,?,?)');
$usedPairs = [];
$rateCount = 0;
$pdo->beginTransaction();
$tries = 0;
while ($rateCount < 3000 && $tries < 30000) {
    $tries++;
    $doctorId = ri($doctorIds);
    $userId   = ri($patientIds);
    $key      = $userId . '-' . $doctorId;
    if (isset($usedPairs[$key])) continue;
    $usedPairs[$key] = true;
    $score = wRand([1,2,3,4,5], [3,5,15,35,42]);
    $ts    = $now - rand(3600, 86400 * 400);
    $rateStmt->execute([uuid(), $score, $ts, $ts, $userId, $doctorId]);
    $rateCount++;
    if ($rateCount % 1000 === 0) { $pdo->commit(); $pdo->beginTransaction(); echo "  $rateCount\n"; }
}
$pdo->commit();
echo "Ratings: $rateCount\n";

// ── Comments ──────────────────────────────────────────────────────────────────
echo "Inserting comments...\n";
$comTexts = [
    'دکتر بسیار دلسوز و با حوصله هستند. توضیحات کامل دادند.',
    'معاینه دقیق بود. تشخیص درست و درمان موثر. ممنونم.',
    'وقت انتظار کم بود و کیفیت ویزیت عالی.',
    'بسیار متبحر و باتجربه. مشکلم حل شد.',
    'رفتار حرفه‌ای و انسانی. مطب تمیز و منظم. توصیه می‌کنم.',
    'ویزیت خوبی داشتم. دارو‌ها موثر بود.',
    'یکی از بهترین پزشکانی که دیده‌ام. صبور و دقیق.',
    'کمی صبر کردم ولی ارزشش داشت. وقت کافی گذاشت.',
    'متخصص واقعی. همه سوالات را صادقانه جواب داد.',
    'رزرو آسان و ویزیت به موقع. کاملاً راضی هستم.',
    'برخورد محترمانه و تخصص بالا. حتماً دوباره مراجعه می‌کنم.',
    'اطلاعات دقیق و مشاوره عالی. بهترین انتخاب بود.',
];
$comStmt     = $pdo->prepare('INSERT INTO comments (uuid,body,status,created_at,updated_at,user_id,doctor_id) VALUES (?,?,?,?,?,?,?)');
$comStatuses = ['approved','approved','approved','approved','pending','rejected'];
$pdo->beginTransaction();
for ($i = 0; $i < 2000; $i++) {
    $ts = $now - rand(3600, 86400 * 400);
    $comStmt->execute([uuid(), ri($comTexts), ri($comStatuses), $ts, $ts, ri($patientIds), ri($doctorIds)]);
    if (($i+1) % 500 === 0) { $pdo->commit(); $pdo->beginTransaction(); echo "  Comments: " . ($i+1) . "\n"; }
}
$pdo->commit();
echo "Comments: 2000\n";

// ── Blogs ─────────────────────────────────────────────────────────────────────
echo "Inserting blogs...\n";
$blogStmt = $pdo->prepare('INSERT INTO blogs (uuid,title,slug,body,summary,tags,status,created_at,updated_at,author_id) VALUES (?,?,?,?,?,?,?,?,?,?)');
$blogData = [
    ['راهنمای جامع پیشگیری از بیماری‌های قلبی','heart-disease-prevention','بیماری‌های قلبی از علل اصلی مرگ هستند. با تغذیه سالم، ورزش منظم، ترک سیگار و کنترل فشار خون می‌توان خطر ابتلا را کاهش داد.',['قلب','پیشگیری','سلامت'],'published'],
    ['تغذیه سالم برای کودکان در سنین رشد','healthy-nutrition-children','مصرف متعادل پروتئین، لبنیات، میوه و سبزیجات برای رشد کودکان ضروری است.',['کودکان','تغذیه','رشد'],'published'],
    ['اهمیت چکاپ منظم سالانه','annual-checkup','آزمایش خون، فشار خون و غربالگری سرطان باید سالانه انجام شوند. تشخیص زودهنگام درمان را ساده‌تر می‌کند.',['چکاپ','پیشگیری'],'published'],
    ['مدیریت استرس در زندگی مدرن','stress-management','تنفس عمیق، مدیتیشن، ورزش و ارتباط اجتماعی سالم از راهکارهای موثر مدیریت استرس هستند.',['استرس','سلامت روان'],'published'],
    ['دیابت نوع ۲: علائم و کنترل','diabetes-type2','تشنگی زیاد، ادرار مکرر و خستگی از علائم دیابت هستند. رژیم مناسب و ورزش در مدیریت آن حیاتی است.',['دیابت','قند خون'],'published'],
    ['نقش ورزش در سلامت قلب','exercise-cardiovascular','۱۵۰ دقیقه فعالیت هوازی در هفته برای سلامت قلب ضروری است.',['ورزش','قلب'],'published'],
    ['خواب کافی و سلامت روان','sleep-health','بزرگسالان به ۷-۹ ساعت خواب نیاز دارند. کمبود خواب با بیماری‌های مزمن ارتباط دارد.',['خواب','سلامت'],'published'],
    ['مراقبت از پوست در برابر آفتاب','skin-care-sun','استفاده از کرم ضدآفتاب SPF 30+ و پوشش مناسب از پوست محافظت می‌کند.',['پوست','ضدآفتاب'],'published'],
    ['پیشگیری از پوکی استخوان','osteoporosis','مصرف کلسیم، ویتامین D و ورزش منظم از پوکی استخوان جلوگیری می‌کنند.',['استخوان','کلسیم'],'published'],
    ['مراقبت از بینایی','eye-care','معاینه سالانه چشم و رعایت قانون ۲۰-۲۰-۲۰ برای سلامت چشم ضروری است.',['چشم','بینایی'],'published'],
    ['سرطان پستان؛ تشخیص زودهنگام','breast-cancer','معاینه خودآزمایی ماهانه و ماموگرافی سالانه از ابزارهای تشخیص زودهنگام هستند.',['سرطان','پستان'],'published'],
    ['بهداشت دهان و دندان','dental-hygiene','مسواک زدن دو بار در روز و مراجعه به دندانپزشک هر ۶ ماه توصیه می‌شود.',['دندان','بهداشت'],'published'],
    ['کنترل فشار خون بالا','blood-pressure','کاهش نمک، ورزش منظم و مصرف داروها در کنترل فشار خون موثر هستند.',['فشار خون','قلب'],'published'],
    ['واکسیناسیون بزرگسالان','adult-vaccination','آنفلوانزا، هپاتیت B و واکسن HPV از واکسن‌های مهم بزرگسالی هستند.',['واکسن','پیشگیری'],'published'],
    ['آرتروز زانو: درمان و بازتوانی','knee-arthritis','فیزیوتراپی، ورزش‌های تقویتی و کاهش وزن در درمان آرتروز زانو موثر هستند.',['آرتروز','ارتوپدی'],'published'],
    ['تغذیه در بیماری‌های کلیوی','renal-diet','رژیم کم‌پتاسیم و کم‌فسفر برای بیماران کلیوی ضروری است.',['کلیه','تغذیه'],'draft'],
    ['سلامت روان در محیط کار','workplace-mental-health','تعادل کار و زندگی و ارتباط موثر با همکاران از عوامل سلامت روان در کار هستند.',['سلامت روان','کار'],'published'],
    ['آلرژی فصلی','seasonal-allergy','اجتناب از محرک‌ها و استفاده از آنتی‌هیستامین از روش‌های اصلی مقابله با آلرژی هستند.',['آلرژی','تنفس'],'published'],
    ['ورزش در دوران بارداری','pregnancy-exercise','پیاده‌روی و یوگای بارداری با نظر پزشک برای مادر و جنین مفید است.',['بارداری','ورزش'],'published'],
    ['پیشگیری از سرطان روده','colorectal-cancer','کولونوسکوپی از سن ۴۵ سالگی و رژیم پرفیبر خطر را کاهش می‌دهند.',['سرطان','روده'],'published'],
];
$adminRow = $pdo->query("SELECT id FROM users WHERE roles LIKE '%ROLE_ADMIN%' LIMIT 1")->fetch(PDO::FETCH_ASSOC);
$adminId  = $adminRow ? $adminRow['id'] : ri($doctorIds);
foreach ($blogData as $b) {
    $ts = $now - rand(86400, 86400 * 300);
    $blogStmt->execute([
        uuid(), $b[0], $b[1] . '-' . rand(100,999), $b[2],
        mb_substr($b[2], 0, 200), json_encode($b[3], JSON_UNESCAPED_UNICODE),
        $b[4], $ts, $ts, $adminId
    ]);
}
echo 'Blogs: ' . count($blogData) . "\n";

// ── Summary ───────────────────────────────────────────────────────────────────
echo "\n=== Final counts ===\n";
$tables = ['users','doctors','clinics','clinic_doctors','clinic_specialties','clinic_services','clinic_insurances',
           'doctor_specialties','doctor_expertise','doctor_provinces','doctor_cities','doctor_addresses',
           'appointments','payments','rates','comments','blogs','insurances','profiles'];
$total = 0;
foreach ($tables as $t) {
    $c = (int)$pdo->query("SELECT COUNT(*) FROM `$t`")->fetchColumn();
    printf("  %-30s %d\n", $t . ':', $c);
    $total += $c;
}
echo "\nTotal records: $total\n";
