<?php
require __DIR__ . '/vendor/autoload.php';
(new Symfony\Component\Dotenv\Dotenv())->bootEnv(__DIR__ . '/.env');
$kernel = new App\Kernel($_SERVER['APP_ENV'], (bool)$_SERVER['APP_DEBUG']);
$kernel->boot();
$em = $kernel->getContainer()->get('doctrine')->getManager();

$conn = $em->getConnection();
$now  = time();

// ── Helpers ──────────────────────────────────────────────────────────────────

function slot(string $date, int $hour, int $minute = 0): int {
    return mktime($hour, $minute, 0, (int)date('m', strtotime($date)), (int)date('d', strtotime($date)), (int)date('Y', strtotime($date)));
}

function today(int $daysOffset = 0): string {
    return date('Y-m-d', strtotime(($daysOffset >= 0 ? "+$daysOffset" : "$daysOffset") . ' days'));
}

// ── Load entities ────────────────────────────────────────────────────────────

$doctor1   = $em->getRepository(\App\Doctor\Entity\Doctor::class)->find(1184); // آرمان رضایی
$doctor4   = $em->getRepository(\App\Doctor\Entity\Doctor::class)->find(1185); // سامان علوی
$clinic2   = $em->getRepository(\App\Clinic\Entity\Clinic::class)->find(203);  // کلینیک تست پگاه
$clinic4   = $em->getRepository(\App\Clinic\Entity\Clinic::class)->find(204);  // کلینیک تخصصی علوی

$spec3  = $em->getRepository(\App\Specialty\Entity\Specialty::class)->find(3);   // قلب و عروق
$spec10 = $em->getRepository(\App\Specialty\Entity\Specialty::class)->find(10);  // نورولوژی
$spec110= $em->getRepository(\App\Specialty\Entity\Specialty::class)->find(110); // ارتوپدی
$spec111= $em->getRepository(\App\Specialty\Entity\Specialty::class)->find(111); // ارتوپدی عمومی

// ── کاربر ۱: دکتر آرمان رضایی ───────────────────────────────────────────────

$doctor1->setGender('man')
    ->setDegree('specialist')
    ->setMedicalSystemCode('IR-12345')
    ->setMobileNumber('09100000011')
    ->setActivityTime(mktime(0,0,0,1,1,2010))
    ->setInfo('متخصص قلب و عروق با بیش از ۱۴ سال سابقه بالینی. فارغ‌التحصیل دانشگاه علوم پزشکی تهران. عضو انجمن قلب ایران.')
    ->setDoctorRate(4.5)
    ->setDoctorRatePercentage(90.0)
    ->setActiveDoctorAppointment(true);

// تخصص‌ها
$doctor1->getSpecialties()->clear();
if ($spec3)  $doctor1->getSpecialties()->add($spec3);
if ($spec10) $doctor1->getSpecialties()->add($spec10);

$em->flush();

// خدمات
$conn->executeStatement('DELETE FROM doctor_expertise WHERE doctor_id = ?', [1184]);
foreach ([101, 102, 103, 104, 105] as $svcId) {
    $conn->executeStatement('INSERT IGNORE INTO doctor_expertise (doctor_id, service_id) VALUES (?, ?)', [1184, $svcId]);
}

echo "✅ دکتر آرمان رضایی بروزرسانی شد\n";

// ── کاربر ۴: دکتر سامان علوی ────────────────────────────────────────────────

$doctor4->setGender('man')
    ->setDegree('specialist')
    ->setMedicalSystemCode('IR-67890')
    ->setMobileNumber('09100000044')
    ->setActivityTime(mktime(0,0,0,1,1,2012))
    ->setInfo('متخصص ارتوپدی و جراحی مفاصل. فارغ‌التحصیل دانشگاه شهید بهشتی. تخصص ویژه در جراحی آرتروسکوپی زانو و تعویض مفصل.')
    ->setDoctorRate(4.7)
    ->setDoctorRatePercentage(94.0)
    ->setActiveDoctorAppointment(true);

$doctor4->getSpecialties()->clear();
if ($spec110) $doctor4->getSpecialties()->add($spec110);
if ($spec111) $doctor4->getSpecialties()->add($spec111);

$em->flush();

$conn->executeStatement('DELETE FROM doctor_expertise WHERE doctor_id = ?', [1185]);
foreach ([11101, 11105, 11201, 11401] as $svcId) {
    $conn->executeStatement('INSERT IGNORE INTO doctor_expertise (doctor_id, service_id) VALUES (?, ?)', [1185, $svcId]);
}

echo "✅ دکتر سامان علوی بروزرسانی شد\n";

// ── کلینیک تست پگاه (clinic_id=203) ────────────────────────────────────────

$clinic2->setName('کلینیک تخصصی قلب پگاه')
    ->setInfo('کلینیک تخصصی قلب و عروق با مجهزترین تجهیزات تشخیصی. ارائه خدمات نوار قلب، اکو، تست ورزش و مشاوره تخصصی.')
    ->setAddress('تهران، خیابان ولیعصر، بالاتر از پارک ساعی، پلاک ۱۲۰')
    ->setTelephone('02188001234')
    ->setCityId(108)
    ->setProvinceId(8)
    ->setLatitude(35.7219)
    ->setLongitude(51.3347)
    ->setIsActive(true)
    ->setIs247(false)
    ->setWorkingDays('شنبه تا چهارشنبه ۸-۱۶، پنجشنبه ۸-۱۲');

$em->flush();

// تخصص کلینیک
$conn->executeStatement('DELETE FROM clinic_specialties WHERE clinic_id = ?', [203]);
foreach ([3, 10] as $sId) {
    $conn->executeStatement('INSERT IGNORE INTO clinic_specialties (clinic_id, specialty_id) VALUES (?, ?)', [203, $sId]);
}

// دکتر آرمان را به این کلینیک اضافه کن (علاوه بر clinic id=1,2 که از قبل هست)
$conn->executeStatement('INSERT IGNORE INTO clinic_doctors (clinic_id, doctor_id) VALUES (?, ?)', [203, 1184]);

echo "✅ کلینیک تخصصی قلب پگاه بروزرسانی شد\n";

// ── کلینیک تخصصی علوی (clinic_id=204) ─────────────────────────────────────

$clinic4->setName('کلینیک تخصصی ارتوپدی علوی')
    ->setInfo('کلینیک تخصصی ارتوپدی با امکانات جراحی آرتروسکوپی. ویزیت، رادیولوژی دیجیتال، MRI، فیزیوتراپی.')
    ->setAddress('تهران، سعادت‌آباد، میدان کاج، خیابان ۲۴ متری، پلاک ۸۵')
    ->setTelephone('02122345678')
    ->setCityId(108)
    ->setProvinceId(8)
    ->setLatitude(35.8065)
    ->setLongitude(51.3822)
    ->setIsActive(true)
    ->setIs247(false)
    ->setWorkingDays('شنبه تا پنجشنبه ۸-۱۸');

$em->flush();

$conn->executeStatement('DELETE FROM clinic_specialties WHERE clinic_id = ?', [204]);
foreach ([110, 111] as $sId) {
    $conn->executeStatement('INSERT IGNORE INTO clinic_specialties (clinic_id, specialty_id) VALUES (?, ?)', [204, $sId]);
}

// دکتر سامان را به کلینیک خودش اضافه کن
$conn->executeStatement('INSERT IGNORE INTO clinic_doctors (clinic_id, doctor_id) VALUES (?, ?)', [204, 1185]);

echo "✅ کلینیک تخصصی ارتوپدی علوی بروزرسانی شد\n";

// ── نوبت‌ها ─────────────────────────────────────────────────────────────────

// بیمارانی که از قبل وجود دارن
$patientIds = [789, 790, 791, 792, 793, 794, 795, 796, 797, 798];

$uuid = fn() => 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)
);

$insertAppt = function(int $doctorId, int $userId, int $slotStart, int $slotEnd, string $status) use ($conn, $uuid, $now): void {
    $conn->executeStatement(
        'INSERT INTO appointments (uuid, slot_start, slot_end, status, doctor_id, user_id, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)',
        [$uuid(), $slotStart, $slotEnd, $status, $doctorId, $userId, $now, $now]
    );
};

// ── نوبت‌های گذشته — دکتر آرمان رضایی (doctor_id=1184) ──────────────────

$pastAppts = [
    // [-7 تا -1 روز گذشته]
    [today(-7), 9,  0, 'visited',             789],
    [today(-7), 10, 0, 'visited',             790],
    [today(-6), 9,  0, 'cancelled_by_user',   791],
    [today(-6), 11, 0, 'visited',             792],
    [today(-5), 9,  0, 'visited',             793],
    [today(-5), 14, 0, 'no_show',             794],
    [today(-4), 9,  0, 'visited',             795],
    [today(-4), 10, 0, 'visited',             796],
    [today(-3), 9,  0, 'cancelled_by_doctor', 797],
    [today(-3), 11, 0, 'visited',             798],
    [today(-2), 9,  0, 'visited',             789],
    [today(-2), 10, 0, 'visited',             790],
    [today(-1), 9,  0, 'visited',             791],
    [today(-1), 11, 0, 'no_show',             792],
];

foreach ($pastAppts as [$date, $h, $m, $status, $patId]) {
    $start = slot($date, $h, $m);
    $insertAppt(1184, $patId, $start, $start + 1800, $status);
}

echo "✅ نوبت‌های گذشته دکتر آرمان ساخته شد (" . count($pastAppts) . " نوبت)\n";

// ── نوبت‌های آینده — دکتر آرمان رضایی (doctor_id=1184) ───────────────────

$futureAppts = [
    [today(1), 9,  0, 'reserved', 793],
    [today(1), 10, 0, 'reserved', 794],
    [today(1), 11, 0, 'reserved', 795],
    [today(2), 9,  0, 'reserved', 796],
    [today(2), 10, 0, 'reserved', 797],
    [today(3), 9,  0, 'reserved', 798],
    [today(3), 14, 0, 'reserved', 789],
    [today(5), 9,  0, 'reserved', 790],
    [today(7), 10, 0, 'reserved', 791],
    [today(10),9,  0, 'reserved', 792],
];

foreach ($futureAppts as [$date, $h, $m, $status, $patId]) {
    $start = slot($date, $h, $m);
    $insertAppt(1184, $patId, $start, $start + 1800, $status);
}

echo "✅ نوبت‌های آینده دکتر آرمان ساخته شد (" . count($futureAppts) . " نوبت)\n";

// ── نوبت‌های گذشته — دکتر سامان علوی (doctor_id=1185) ───────────────────

$pastAppts4 = [
    [today(-10), 10, 0, 'visited',             793],
    [today(-10), 11, 0, 'visited',             794],
    [today(-8),  9,  0, 'visited',             795],
    [today(-8),  14, 0, 'cancelled_by_user',   796],
    [today(-6),  9,  0, 'visited',             797],
    [today(-6),  10, 0, 'visited',             798],
    [today(-4),  9,  0, 'no_show',             789],
    [today(-4),  11, 0, 'visited',             790],
    [today(-2),  10, 0, 'visited',             791],
    [today(-1),  9,  0, 'visited',             792],
];

foreach ($pastAppts4 as [$date, $h, $m, $status, $patId]) {
    $start = slot($date, $h, $m);
    $insertAppt(1185, $patId, $start, $start + 2700, $status); // 45 دقیقه برای ارتوپد
}

echo "✅ نوبت‌های گذشته دکتر سامان ساخته شد (" . count($pastAppts4) . " نوبت)\n";

// ── نوبت‌های آینده — دکتر سامان علوی (doctor_id=1185) ────────────────────

$futureAppts4 = [
    [today(1), 10, 0, 'reserved', 793],
    [today(1), 11, 0, 'reserved', 794],
    [today(2), 9,  0, 'reserved', 795],
    [today(2), 14, 0, 'reserved', 796],
    [today(3), 10, 0, 'reserved', 797],
    [today(4), 9,  0, 'reserved', 798],
    [today(6), 11, 0, 'reserved', 789],
    [today(8), 9,  0, 'reserved', 790],
];

foreach ($futureAppts4 as [$date, $h, $m, $status, $patId]) {
    $start = slot($date, $h, $m);
    $insertAppt(1185, $patId, $start, $start + 2700, $status);
}

echo "✅ نوبت‌های آینده دکتر سامان ساخته شد (" . count($futureAppts4) . " نوبت)\n";

echo "\n=== همه داده‌ها با موفقیت ساخته شدند ===\n\n";

// ── خلاصه نهایی ──────────────────────────────────────────────────────────────

echo "┌─────────────────────────────────────────────────────────────────────┐\n";
echo "│                         خلاصه کاربران تستی                         │\n";
echo "├─────────────────────────────────────────────────────────────────────┤\n";
echo "│  ادمین:       09120671713  /  admin123                              │\n";
echo "│  دکتر چند کلینیک: 09100000011  /  Test1234  (دکتر آرمان رضایی)    │\n";
echo "│  صاحب کلینیک: 09100000022  /  Test1234  (کلینیک قلب پگاه)         │\n";
echo "│  منشی:        09100000033  /  Test1234  (منشی دکتر مهناز)          │\n";
echo "│  دکتر+کلینیک: 09100000044  /  Test1234  (دکتر سامان + کلینیک علوی)│\n";
echo "└─────────────────────────────────────────────────────────────────────┘\n";
