<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Schema;

class MaintenanceController extends Controller
{
    /**
     * تنظيف كاش Laravel (عروض، إعدادات، مسارات، تطبيق…).
     */
    public function clearCache()
    {
        try {
            Artisan::call('optimize:clear');
            $out = trim(Artisan::output());
        } catch (\Throwable $e) {
            return back()->with('error', 'تعذّر تنظيف الكاش: '.$e->getMessage());
        }

        $msg = $out !== '' ? $out : 'تم تنظيف الكاش بنجاح.';

        return back()->with('success', $msg);
    }

    /**
     * حذف جميع الجلسات من الخادم (جدول sessions أو ملفات التخزين).
     * يُبطِل جلسات الجميع — يعادل إلغاء صلاحية كوكيز الجلسة من جهة الخادم.
     */
    public function clearSessions(Request $request)
    {
        try {
            if (Schema::hasTable('sessions')) {
                DB::table('sessions')->truncate();
            } else {
                $this->purgeFileSessions();
            }
        } catch (\Throwable $e) {
            return back()->with('error', 'تعذّر مسح الجلسات: '.$e->getMessage());
        }

        $request->session()->invalidate();
        $request->session()->regenerateToken();

        return redirect()
            ->route('admin.login')
            ->with('success', 'تم مسح جميع الجلسات. سجّل دخولك من جديد — وسيحتاج كل المستخدمون (مرضى، أطباء، إدارة…) لإعادة تسجيل الدخول.');
    }

    /**
     * إنشاء/إعادة إنشاء الرابط الرمزي public/storage → storage/app/public
     * لعرض الصور والملفات عبر الرابط العام.
     */
    public function storageLink()
    {
        try {
            Artisan::call('storage:link', ['--force' => true]);
            $out = trim(Artisan::output());
        } catch (\Throwable $e) {
            return back()->with('error', 'تعذّر إنشاء رابط التخزين. على ويندوز قد تحتاج صلاحيات المسؤول أو تفعيل وضع المطوّر للروابط الرمزية: '.$e->getMessage());
        }

        $msg = $out !== '' ? $out : 'تم ربط مجلد التخزين بـ public/storage بنجاح.';

        return back()->with('success', $msg);
    }

    private function purgeFileSessions(): void
    {
        $dir = storage_path('framework/sessions');
        if (! is_dir($dir)) {
            return;
        }
        foreach (File::files($dir) as $file) {
            if ($file->getFilename() === '.gitignore') {
                continue;
            }
            @unlink($file->getPathname());
        }
    }
}
