<?php 
namespace App\Http\Controllers\Socialite;

use App\Http\Controllers\Controller;
use Laravel\Socialite\Facades\Socialite;
use App\Models\User;
use App\Models\Admin;
use App\Models\Hcp;
use App\Models\Lablogin;
use App\Models\Radiologylogin;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;

class SocialAuthController extends Controller
{

public function redirectToGoogleAdmin()
    {
      
        session(['user_type' => 'admin']);
        

        return Socialite::driver('google')
            ->stateless()
            ->with(['prompt' => 'select_account'])  
            ->redirect();
    }
    
    
    public function redirectToGoogleLabs()
    {

        session(['user_type' => 'labs']);
        

        return Socialite::driver('google')
            ->stateless()
            ->with(['prompt' => 'select_account'])  
            ->redirect();
    }
    
    
        public function redirectToGoogleRadiology()
    {

        session(['user_type' => 'radiology']);
        
        return Socialite::driver('google')
            ->stateless()
            ->with(['prompt' => 'select_account'])  
            ->redirect();
    }
    


    public function redirectToGoogleHcp()
    {
       
        session(['user_type' => 'hcp']);
        
       
        return Socialite::driver('google')
            ->stateless()
            ->with(['prompt' => 'select_account'])  
            ->redirect();
    }


    public function handleGoogleCallback()
    {
        try {
            $user = Socialite::driver('google')->stateless()->user();

          
            $userType = session('user_type'); 

            return $this->registerOrLoginUser($user, $userType);
        } catch (\Exception $e) {
            Log::error('Google Login Error: ' . $e->getMessage());
            return redirect()->route('login')->withErrors(['error' => 'Unable to login with Google. Please try again.']);
        }
    }
  
    public function redirectToFacebookAdmin()
    {
        session(['user_type' => 'admin']);
        return Socialite::driver('facebook')->redirect();
    }
    
     public function redirectToFacebookHcp() 
    {
      session(['user_type' => 'hcp']);
        return Socialite::driver('facebook')->redirect();
    }
    
    
     public function redirectToFacebookLabs()
    {
        session(['user_type' => 'labs']);
        return Socialite::driver('facebook')->redirect();
    }
    
     public function redirectToFacebookRadiology() 
    {
      session(['user_type' => 'radiology']);
        return Socialite::driver('facebook')->redirect();
    }


    public function handleFacebookCallback()
    {
        try {
            $user = Socialite::driver('facebook')->stateless()->user();
             $userType = session('user_type'); 
            return $this->registerOrLoginUser($user, $userType); 
        } catch (\Exception $e) {
            Log::error('Facebook Login Error: ' . $e->getMessage());
            return redirect()->route('login')->withErrors(['error' => 'Unable to login with Facebook. Please try again.']);
        }
    }

     protected function registerOrLoginUser($data, $userType)
    {
    
    
        try {
         
            if ($userType == 'admin') {
                $user = Admin::where('email', $data->email)->first();
            } elseif ($userType == 'hcp') {
                $user = Hcp::where('email', $data->email)->first();
            } elseif ($userType == 'radiology') {
                $user = Radiologylogin::where('email', $data->email)->first();
            } elseif ($userType == 'labs') {
                $user = Lablogin::where('email', $data->email)->first();
            } else { 
                return redirect()->route('login')->withErrors(['error' => 'Invalid user type']);
            } 
            if (!$user) {
           
               
                return redirect()->back()->withErrors(['email' => 'This email is not registered.'])->withInput();
            }
            
        
            if ($userType == 'admin') {
                Auth::guard('admin')->login($user); 
                Log::info('Admin login successful.');
                 session(['user_type' => '']); 
                return redirect()->route('admin.dashboard')->with('success', 'Admin login successfully!');
            } elseif ($userType == 'hcp') {
                Auth::guard('hcp')->login($user);  
                Log::info('HCP login successful.');
                 session(['user_type' => '']);
                return redirect()->route('hcp.dashboard')->with('success', 'HCP login successfully!');
                
            } elseif ($userType == 'radiology') {
                Auth::guard('radiology')->login($user);  
                Log::info('Radiology login successful.');
                 session(['user_type' => '']);
                return redirect()->route('radiology.dashboard')->with('success', 'Radiology login successfully!');
                
            }
            elseif ($userType == 'labs') {
                Auth::guard('lab')->login($user);  
                Log::info('Labs login successful.');
                 session(['user_type' => '']);
                return redirect()->route('labs.dashboard')->with('success', 'Labs login successfully!');
                
            }
        } catch (\Exception $e) {
            Log::error('Error in registerOrLoginUser: ' . $e->getMessage());
            return redirect()->route('login')->withErrors(['error' => 'An error occurred while processing your login. Please try again.']);
        }
    }
}
  