<?php

namespace App\Http\Controllers\Patient;

use App\Http\Controllers\Controller;
use App\Models\Patient;
use App\Models\User;
use Illuminate\Http\Request;

class AuthController extends Controller
{
    public function showLogin()
    {
        if (session('patient_id')) {
            return redirect()->route('patient.dashboard');
        }

        return view('patient.auth.login');
    }

    public function login(Request $request)
    {
        $data = $request->validate([
            'phone' => 'required|string',
        ]);

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

        if (! $user || $user->role !== 'patient') {
            return back()->with('error', 'رقم الهاتف غير مسجّل كمريض');
        }

        if (! $user->is_active) {
            return back()->with('error', 'حسابك غير مفعّل بعد — يرجى انتظار موافقة الإدارة');
        }

        $patient = $user->patient;
        if (! $patient) {
            return back()->with('error', 'لا يوجد ملف مريض مرتبط بهذا الحساب');
        }

        session(['patient_id' => $patient->id]);

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

    public function showRegister()
    {
        if (session('patient_id')) {
            return redirect()->route('patient.dashboard');
        }

        return view('patient.auth.login', ['openTab' => 'register']);
    }

    public function register(Request $request)
    {
        $data = $request->validate([
            'name'          => 'required|string|max:100',
            'phone'         => 'required|string|unique:users,phone',
            'email'         => 'nullable|email|unique:users,email',
            'gender'        => 'nullable|in:male,female',
            'date_of_birth' => 'nullable|date',
            'blood_type'    => 'nullable|in:A+,A-,B+,B-,AB+,AB-,O+,O-',
        ]);

        $email = ! empty($data['email']) ? $data['email'] : null;

        $user = User::create([
            'name'      => $data['name'],
            'phone'     => $data['phone'],
            'email'     => $email,
            'password'  => User::randomPasswordHash(),
            'role'      => 'patient',
            'is_active' => false,
        ]);

        Patient::create([
            'user_id'       => $user->id,
            'gender'        => $data['gender'] ?? null,
            'date_of_birth' => $data['date_of_birth'] ?? null,
            'blood_type'    => $data['blood_type'] ?? null,
        ]);

        return redirect()->route('patient.login')
            ->with('success', 'تم إنشاء طلب التسجيل. سيتم تفعيل حسابك من الإدارة قريباً — بعدها يمكنك الدخول برقم هاتفك فقط.');
    }

    public function logout()
    {
        session()->forget('patient_id');

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