<?php

namespace App\Http\Controllers;

use App\Custom\SQLConnection;
use Illuminate\Http\Request;
use Laravel\Socialite\Facades\Socialite;
use Illuminate\Support\Facades\Session;
use Throwable;

class GoogleAuthController extends Controller
{
    /**
     * Redirect the user to Google’s OAuth page.
     */
    public function redirect()
    {
        return Socialite::driver('google')->redirect();
    }

    /**
     * Handle the callback from Google.
     */
    public function callback()
    {
        try {
            // Get the user information from Google
            $user = Socialite::driver('google')->user();
            $email = $user->email;
            $usuario = SQLConnection::iniciarSesionConGoogle($email);
            //
            switch ($usuario->status) {
			    case '0':
                    $permisos = SQLConnection::obtenerPermisos($usuario->user_id);
                    $preferencias = SQLConnection::obtenerPreferenciasUsuario($usuario->user_id);
                    //
                    if (isset($preferencias->codigo_idioma)) {
                        $usuario->codigo_idioma = $preferencias->codigo_idioma;
                    }
                    //
                    if (empty($permisos)) {
                        return redirect('/login')->with('error', 'Fallo la autenticación con google: Usuario no tiene permisos para loguearse');
                    }
                    // Estructurar los permisos jerárquicamente
                    $permisos = LoginController::estructurarPermisosJerarquicos($permisos);
                    //
                    $user_horario = SQLConnection::backendStoreProcedure('obtener_users_horarios', array($usuario->user_id), 'selectOne');
                    if (!isset($user_horario->respuesta)) {
                        return redirect('/login')->with('error', 'Fallo la autenticación con google: No puede ingresar en éste momento');
                    }
                    $usuario->user_horario = $user_horario;
                    //
                    Session::put('usuario', $usuario);
                    Session::put('permisos', $permisos);
                    Session::put('informes_test_access', false);
                    Session::put('google_auth', true);
                    Session::save();
                    \Artisan::call('view:clear');
                    return redirect('/');
                    break;
                default:
                    return redirect('/login')->with('error', 'Fallo la autenticación con google: '. $usuario->status_message);
            }
            //
        } catch (Throwable $e) {
            
            return redirect('/login')->with('error', 'Fallo la autenticación con google: Error interno.');
        }
        
    }
}