<?php

namespace App\Http\Middleware;

use App\Models\Doctor;
use Closure;
use Illuminate\Http\Request;

class SecretaryAuthMiddleware
{
    public function handle(Request $request, Closure $next): mixed
    {
        // دخول قديم: كان يُخزَّن فقط secretary_doctor_id (بدون secretary_user_id) → نُكمِل الجلسة لتفادي حلقة التوجيه مع /
        if (! session('secretary_user_id') && session('secretary_doctor_id')) {
            $legacyDoctor = Doctor::find(session('secretary_doctor_id'));
            if ($legacyDoctor) {
                session([
                    'secretary_user_id'   => $legacyDoctor->user_id,
                    'current_doctor_id'   => $legacyDoctor->id,
                ]);
            }
        }

        if (! session('current_doctor_id') && session('secretary_doctor_id')) {
            session(['current_doctor_id' => session('secretary_doctor_id')]);
        }

        $userId = session('secretary_user_id');

        if (! $userId) {
            return redirect()->route('secretary.login')
                ->with('error', 'يجب تسجيل الدخول أولاً');
        }

        $user = \App\Models\User::find($userId);

        // السكرتير يكون role = 'secretary' أو 'doctor' (الطبيب يقدر يدخل على شاشة السكرتير)
        if (! $user || ! in_array($user->role, ['secretary', 'doctor', 'admin']) || ! $user->is_active) {
            session()->forget(['secretary_user_id', 'secretary_doctor_id', 'current_doctor_id']);
            return redirect()->route('secretary.login')
                ->with('error', 'غير مصرح لك بالوصول');
        }

        // نحتاج doctor_id مرتبط
        $doctor = session('current_doctor_id')
            ? Doctor::find(session('current_doctor_id'))
            : null;

        if (! $doctor) {
            session()->forget(['secretary_user_id', 'secretary_doctor_id', 'current_doctor_id']);
            return redirect()->route('secretary.login')
                ->with('error', 'يرجى تسجيل الدخول من جديد');
        }

        view()->share('secretaryUser', $user);
        view()->share('currentDoctor', $doctor);

        return $next($request);
    }
}
