<?php
/**
 * Oasis Demo Seeder (v2 - smarter .env lookup)
 *
 * Fix: many users place this script either in /public or in project root.
 * This version searches for .env in common locations automatically.
 *
 * Usage:
 * - Put in Laravel public/:  public/seed_demo.php  (recommended)
 *   then open:  http://localhost/oasis-management/seed_demo.php?run=1
 * - OR put in project root: seed_demo.php
 *   then open:  http://localhost/oasis-management/seed_demo.php?run=1
 *
 * IMPORTANT: delete the file after running.
 */

header('Content-Type: text/html; charset=utf-8');

function h($s) { return htmlspecialchars((string)$s, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); }

function find_env_path() {
    $candidates = [
        __DIR__ . '/.env',           // if script is in project root
        __DIR__ . '/../.env',        // if script is in /public
        __DIR__ . '/../../.env',     // extra fallback
    ];
    foreach ($candidates as $p) {
        if (file_exists($p)) return $p;
    }
    // last resort: search up to 5 levels up
    $p = __DIR__;
    for ($i=0; $i<5; $i++) {
        $p = realpath($p . '/..');
        if (!$p) break;
        $try = $p . '/.env';
        if (file_exists($try)) return $try;
    }
    return null;
}

function read_env($path) {
    if (!$path || !file_exists($path)) return [];
    $lines = file($path, FILE_IGNORE_NEW_LINES);
    $env = [];
    foreach ($lines as $line) {
        $line = trim($line);
        if ($line === '' || $line[0] === '#') continue;
        if (!str_contains($line, '=')) continue;
        [$k, $v] = explode('=', $line, 2);
        $k = trim($k);
        $v = trim($v);
        if ((str_starts_with($v, '"') && str_ends_with($v, '"')) || (str_starts_with($v, "'") && str_ends_with($v, "'"))) {
            $v = substr($v, 1, -1);
        }
        $env[$k] = $v;
    }
    return $env;
}

if (!isset($_GET['run']) || $_GET['run'] !== '1') {
    echo "<h2>Oasis Demo Seeder (v2)</h2>";
    echo "<p>للتنفيذ افتح:</p><pre>?run=1</pre>";
    echo "<p><b>مهم:</b> احذف الملف بعد النجاح.</p>";
    echo "<hr>";
    echo "<p>مسار السكربت الحالي: <code>" . h(__FILE__) . "</code></p>";
    $envPath = find_env_path();
    echo "<p>مسار .env المكتشف: <code>" . h($envPath ?: 'لم يتم العثور عليه') . "</code></p>";
    exit;
}

$envPath = find_env_path();
if (!$envPath) {
    echo "<h3 style='color:#b00'>خطأ: لم أجد ملف .env</h3>";
    echo "<p>جرب أحد الحلول:</p>";
    echo "<ol>";
    echo "<li>ضع السكربت داخل مجلد <code>public/</code> في Laravel (مفضل).</li>";
    echo "<li>أو ضع السكربت في جذر المشروع بجانب <code>.env</code>.</li>";
    echo "</ol>";
    echo "<p>مسار السكربت: <code>" . h(__FILE__) . "</code></p>";
    exit;
}

$env = read_env($envPath);

$dbHost = $env['DB_HOST'] ?? '127.0.0.1';
$dbPort = $env['DB_PORT'] ?? '3306';
$dbName = $env['DB_DATABASE'] ?? '';
$dbUser = $env['DB_USERNAME'] ?? '';
$dbPass = $env['DB_PASSWORD'] ?? '';

if ($dbName === '' || $dbUser === '') {
    echo "<h3 style='color:#b00'>خطأ: قرأت .env لكن بيانات DB ناقصة</h3>";
    echo "<p>تأكد أن .env يحتوي:</p>";
    echo "<pre>DB_HOST=\nDB_PORT=\nDB_DATABASE=\nDB_USERNAME=\nDB_PASSWORD=</pre>";
    echo "<p>المسار: <code>" . h($envPath) . "</code></p>";
    exit;
}

try {
    $dsn = "mysql:host={$dbHost};port={$dbPort};dbname={$dbName};charset=utf8mb4";
    $pdo = new PDO($dsn, $dbUser, $dbPass, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    ]);
} catch (Throwable $e) {
    echo "<h3 style='color:#b00'>فشل الاتصال بقاعدة البيانات</h3>";
    echo "<pre>" . h($e->getMessage()) . "</pre>";
    exit;
}

function table_exists(PDO $pdo, $table) {
    $stmt = $pdo->prepare("SELECT COUNT(*) c FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = ?");
    $stmt->execute([$table]);
    return (int)$stmt->fetch()['c'] > 0;
}

function get_columns(PDO $pdo, $table) {
    $stmt = $pdo->prepare("SELECT column_name FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = ?");
    $stmt->execute([$table]);
    $cols = [];
    foreach ($stmt->fetchAll() as $r) $cols[$r['column_name']] = true;
    return $cols;
}

function delete_all(PDO $pdo, $table) {
    if (!table_exists($pdo, $table)) return;
    $pdo->exec("DELETE FROM `{$table}`");
    try { $pdo->exec("ALTER TABLE `{$table}` AUTO_INCREMENT=1"); } catch (Throwable $e) {}
}

function insert_row(PDO $pdo, $table, $row, &$cacheCols, &$stats) {
    if (!table_exists($pdo, $table)) { $stats['skipped'][$table] = true; return; }
    if (!isset($cacheCols[$table])) $cacheCols[$table] = get_columns($pdo, $table);
    $cols = $cacheCols[$table];

    $final = [];
    foreach ($row as $k => $v) if (isset($cols[$k])) $final[$k] = $v;

    if (!$final) { $stats['empty'][$table] = true; return; }

    $fields = array_keys($final);
    $placeholders = implode(',', array_fill(0, count($fields), '?'));
    $sql = "INSERT INTO `{$table}` (`" . implode('`,`', $fields) . "`) VALUES ({$placeholders})";
    $stmt = $pdo->prepare($sql);
    $stmt->execute(array_values($final));
    $stats['inserted'][$table] = ($stats['inserted'][$table] ?? 0) + 1;
}

$tables = [
  'maintenance_logs','maintenance_requests','contract_services','services',
  'contracts','contractors','assets','farms','aflaj','oases'
];

$stats = ['inserted'=>[], 'skipped'=>[], 'empty'=>[]];
$cacheCols = [];

echo "<h2>Oasis Demo Seeder (v2)</h2>";
echo "<p>.env: <code>" . h($envPath) . "</code></p>";
echo "<p>DB: <code>" . h($dbName) . "</code> | Server: <code>" . h($pdo->query('SELECT VERSION() v')->fetch()['v']) . "</code></p>";

try {
    $pdo->exec("SET FOREIGN_KEY_CHECKS=0");
    foreach ($tables as $t) delete_all($pdo, $t);
    $pdo->exec("SET FOREIGN_KEY_CHECKS=1");
} catch (Throwable $e) {
    echo "<h3 style='color:#b00'>فشل تنظيف الجداول</h3><pre>" . h($e->getMessage()) . "</pre>";
    exit;
}

$now = '2025-12-27 00:00:00';

$oases = [
  ['id'=>1,'name'=>'واحة العين','code'=>'OAS-AIN','latitude'=>24.2190,'longitude'=>55.7600,'address'=>'العين – وسط المدينة','notes'=>'بيانات تجريبية لعرض الخريطة والواجهات.','created_at'=>$now,'updated_at'=>$now],
  ['id'=>2,'name'=>'واحة الجيمي','code'=>'OAS-JIMI','latitude'=>24.2485,'longitude'=>55.7420,'address'=>'العين – الجيمي','notes'=>'تتضمن مزارع وأصول وأوامر صيانة متنوعة.','created_at'=>$now,'updated_at'=>$now],
  ['id'=>3,'name'=>'واحة الهيلي','code'=>'OAS-HELI','latitude'=>24.2855,'longitude'=>55.7865,'address'=>'العين – الهيلي','notes'=>'بيانات تجريبية للتقارير والتصدير.','created_at'=>$now,'updated_at'=>$now],
];

$aflaj = [
  ['id'=>1,'oasis_id'=>1,'name'=>'فلج العين (تجريبي)','falaj_type'=>'داوودي','length_m'=>1850,'water_source'=>'عين مائية','latitude'=>24.2198,'longitude'=>55.7593,'notes'=>'مسار تجريبي.','created_at'=>$now,'updated_at'=>$now],
  ['id'=>2,'oasis_id'=>2,'name'=>'فلج الجيمي (تجريبي)','falaj_type'=>'عيني','length_m'=>1320,'water_source'=>'بئر/ضخ','latitude'=>24.2492,'longitude'=>55.7408,'notes'=>'يتضمن نقاط صيانة دورية.','created_at'=>$now,'updated_at'=>$now],
  ['id'=>3,'oasis_id'=>3,'name'=>'فلج الهيلي (تجريبي)','falaj_type'=>'داوودي','length_m'=>2100,'water_source'=>'قناة رئيسية','latitude'=>24.2860,'longitude'=>55.7858,'notes'=>'للاختبار على الخريطة.','created_at'=>$now,'updated_at'=>$now],
];

$farms = [
  ['id'=>1,'oasis_id'=>1,'name'=>'مزرعة النخيل 01','code'=>'F-AIN-01','latitude'=>24.2186,'longitude'=>55.7611,'area_sqm'=>6200,'owner_name'=>'بلدية العين','notes'=>'بيانات تجريبية.','created_at'=>$now,'updated_at'=>$now],
  ['id'=>2,'oasis_id'=>1,'name'=>'مزرعة النخيل 02','code'=>'F-AIN-02','latitude'=>24.2201,'longitude'=>55.7582,'area_sqm'=>5400,'owner_name'=>'بلدية العين','notes'=>'مرتبطة بأصل ضخ وفلتر.','created_at'=>$now,'updated_at'=>$now],
  ['id'=>3,'oasis_id'=>2,'name'=>'مزرعة الجيمي 01','code'=>'F-JIMI-01','latitude'=>24.2478,'longitude'=>55.7429,'area_sqm'=>7100,'owner_name'=>'بلدية العين','notes'=>'لاختبار تعدد الأصول.','created_at'=>$now,'updated_at'=>$now],
];

$assets = [
  ['id'=>1,'farm_id'=>1,'name'=>'مضخة ري رئيسية','asset_type'=>'Pump','serial_no'=>'PMP-AIN-0001','status'=>'Active','latitude'=>24.2182,'longitude'=>55.7616,'install_date'=>'2024-05-20','notes'=>'تشغيل طبيعي.','created_at'=>$now,'updated_at'=>$now],
  ['id'=>2,'farm_id'=>1,'name'=>'صمام تحكم 2 إنش','asset_type'=>'Valve','serial_no'=>'VLV-AIN-1020','status'=>'Active','latitude'=>24.2189,'longitude'=>55.7607,'install_date'=>'2023-11-02','notes'=>'فحص تسريب.','created_at'=>$now,'updated_at'=>$now],
  ['id'=>3,'farm_id'=>2,'name'=>'فلتر شبكي','asset_type'=>'Filter','serial_no'=>'FLT-AIN-3302','status'=>'Active','latitude'=>24.2203,'longitude'=>55.7580,'install_date'=>'2024-01-14','notes'=>'تنظيف أسبوعي.','created_at'=>$now,'updated_at'=>$now],
];

$contractors = [
  ['id'=>1,'name'=>'مقاولات الواحات الحديثة','phone'=>'+971500000111','email'=>'demo1@contractor.test','trade_license'=>'TL-ALAIN-0001','address'=>'العين – المنطقة الصناعية','notes'=>'مقاول تجريبي.','created_at'=>$now,'updated_at'=>$now],
];

$contracts = [
  ['id'=>1,'contractor_id'=>1,'title'=>'عقد صيانة دورية – واحة العين','contract_no'=>'CNT-2025-0001','start_date'=>'2025-01-01','end_date'=>'2025-12-31','value_aed'=>180000,'status'=>'Active','notes'=>'عقد تجريبي.','created_at'=>$now,'updated_at'=>$now],
];

$maintenance_requests = [
  ['id'=>1,'contract_id'=>1,'oasis_id'=>1,'farm_id'=>1,'asset_id'=>1,'falaj_id'=>1,'request_no'=>'MR-0001','order_no'=>'MR-0001','title'=>'فحص مضخة الري الرئيسية + قياس ضغط','priority'=>'High','status'=>'Open','scheduled_date'=>'2025-12-28','notes'=>'أولوية عالية بسبب تذبذب الضغط.','created_at'=>$now,'updated_at'=>$now],
];

$maintenance_logs = [
  ['id'=>1,'maintenance_request_id'=>1,'log_date'=>'2025-12-27 10:15:00','status'=>'InProgress','note'=>'تمت معاينة الموقع وبدء الفحص.','created_at'=>$now,'updated_at'=>$now],
];

try {
    $pdo->beginTransaction();
    foreach ($oases as $r) insert_row($pdo,'oases',$r,$cacheCols,$stats);
    foreach ($aflaj as $r) insert_row($pdo,'aflaj',$r,$cacheCols,$stats);
    foreach ($farms as $r) insert_row($pdo,'farms',$r,$cacheCols,$stats);
    foreach ($assets as $r) insert_row($pdo,'assets',$r,$cacheCols,$stats);
    foreach ($contractors as $r) insert_row($pdo,'contractors',$r,$cacheCols,$stats);
    foreach ($contracts as $r) insert_row($pdo,'contracts',$r,$cacheCols,$stats);
    foreach ($maintenance_requests as $r) insert_row($pdo,'maintenance_requests',$r,$cacheCols,$stats);
    foreach ($maintenance_logs as $r) insert_row($pdo,'maintenance_logs',$r,$cacheCols,$stats);
    $pdo->commit();
} catch (Throwable $e) {
    $pdo->rollBack();
    echo "<h3 style='color:#b00'>فشل إدخال بيانات الديمو</h3><pre>" . h($e->getMessage()) . "</pre>";
    exit;
}

echo "<h3 style='color:#0a0'>تم إدخال بيانات الديمو بنجاح ✅</h3>";
echo "<h4>ملخص الإدخال</h4><ul>";
foreach ($stats['inserted'] as $t=>$c) echo "<li><b>" . h($t) . ":</b> " . h($c) . " سجل</li>";
echo "</ul>";
echo "<hr><p><b>مهم:</b> احذف الملف <code>seed_demo.php</code> الآن لأسباب أمنية.</p>";
