<?php

namespace App\Http\Controllers;

use App\Models\Doctor;
use App\Models\Patient;
use App\Models\Secretary;
use App\Models\User;
use Illuminate\Http\Request;

class LoginController extends Controller
{
    // ===== عرض صفحة الدخول الموحدة =====
    public function showLogin()
    {
        // إذا كان مسجلاً مسبقاً → وجّهه مباشرة
        if (session('admin_id')) {
            return redirect()->route('admin.dashboard');
        }
        // لوحة السكرتير (الـmiddleware يكمّل secretary_user_id/current إن وُجد secretary_doctor_id فقط)
        if (session('secretary_doctor_id')) {
            if (session('secretary_user_id') && ! session('current_doctor_id')) {
                session(['current_doctor_id' => session('secretary_doctor_id')]);
            }

            return redirect()->route('secretary.dashboard');
        }
        if (session('doctor_id')) {
            return redirect()->route('doctor.dashboard');
        }
        if (session('patient_id')) {
            return redirect()->route('patient.dashboard');
        }

        return view('auth.login');
    }

    // ===== معالجة الدخول الموحد — رقم الهاتف فقط =====
    public function login(Request $request)
    {
        $data = $request->validate([
            'phone' => 'required|string',
        ]);

        $user = User::findByPhone($data['phone']);

        if (! $user) {
            return back()
                ->with('error', 'لا يوجد حساب مسجّل بهذا الرقم')
                ->withInput(['phone' => $data['phone']]);
        }

        if (! $user->is_active) {
            $msg = $user->role === 'patient'
                ? 'حسابك غير مفعّل بعد — يرجى انتظار موافقة الإدارة'
                : 'حسابك موقوف — تواصل مع الإدارة';

            return back()->with('error', $msg)->withInput(['phone' => $data['phone']]);
        }

        // ===== توجيه حسب الدور =====
        switch ($user->role) {

            case 'admin':
                session(['admin_id' => $user->id]);

                return redirect()->route('admin.dashboard');

            case 'secretary':
                $secretary = Secretary::with('doctor')
                    ->where('user_id', $user->id)
                    ->where('is_active', true)
                    ->first();

                if (! $secretary) {
                    return back()->with('error', 'حساب الاستقبال غير مفعّل')->withInput(['phone' => $data['phone']]);
                }

                $doctor = $secretary->doctor;
                if (! $doctor || $doctor->status !== 'active') {
                    return back()->with('error', 'لا يوجد طبيب مرتبط أو العيادة غير نشطة')->withInput(['phone' => $data['phone']]);
                }

                session([
                    'secretary_doctor_id' => $secretary->doctor_id,
                    'secretary_user_id'   => $user->id,
                    'current_doctor_id'   => $secretary->doctor_id,
                ]);

                return redirect()->route('secretary.dashboard');

            case 'doctor':
                $doctor = Doctor::where('user_id', $user->id)->first();
                if (! $doctor) {
                    return back()->with('error', 'لا يوجد حساب طبيب مرتبط بهذا الرقم')->withInput(['phone' => $data['phone']]);
                }
                if ($doctor->status === 'pending') {
                    return back()->with('error', 'حسابك قيد المراجعة — سيتم إشعارك عند الموافقة')->withInput(['phone' => $data['phone']]);
                }
                if ($doctor->status === 'suspended') {
                    return back()->with('error', 'حسابك موقوف — تواصل مع الإدارة')->withInput(['phone' => $data['phone']]);
                }

                session(['doctor_id' => $doctor->id]);

                return redirect()->route('doctor.dashboard');

            case 'patient':
                $patient = Patient::where('user_id', $user->id)->first();
                if (! $patient) {
                    return back()->with('error', 'لا يوجد ملف مريض مرتبط بهذا الحساب')->withInput(['phone' => $data['phone']]);
                }
                session(['patient_id' => $patient->id]);

                return redirect()->route('patient.dashboard');

            default:
                return back()->with('error', 'نوع الحساب غير معروف')->withInput(['phone' => $data['phone']]);
        }
    }

    // ===== تسجيل الخروج الموحد =====
    public function logout()
    {
        session()->flush();

        return redirect()->route('login')->with('success', 'تم تسجيل الخروج بنجاح');
    }
}
