<?php

namespace App\Http\Controllers\inside;

use App\Role;
use App\User;
use App\MailLog;
use App\ErrorLog;
use App\Mail\Mails;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Mail;

class AuthController extends Controller
{
    /**
     * Redirección de usuarios después de logear
     *
     * @var string
     */
    protected $redirectTo = '/';

    /**
     * Crear un nuevo control de instancia
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

    public function index(){    
        return view('Outside.index'); 
    }

    public function indexRecPass(){
        return view('Outside.restore');
    }

    public function sendMailRestore(Request $request){
        $email = $request->email;
        if($email != null){
            $user = User::where('email','=', $email)->first();
            if($user != null){
                $user->token = Str::random(50);
                $user->save();
                Mail::to($user->email)->send(new Mails($user->token));
                $mail = MailLog::create([
                    'users_id' => $user->id,
                    'owner' => $user->owner,
                    'description' => 'Se envió un correo de rrecuperación de contraseña de: '.$user->name.' al correo: '.$user->email,
                    'email' => $user->email
                ]);
                $mail->save();
                return redirect('/login')->with('message', 'Se ha enviado un correo a tu bandeja de entrada');
            }
            else{
                $errors = ErrorLog::create([
                    'users_id' => 0,
                    'owner' => 'Error',
                    'description' => 'No existe un usuario con ese correo electrónico.'
                ]);
                $errors->save();
                return redirect()->back()->with('message','No existe un usuario con ese correo electrónico.');
            }
        }
        else{
            $errors = ErrorLog::create([
                'users_id' => 0,
                'owner' => 'Error',
                'description' => 'Ingreso un correo electrónico inválido.'
            ]);
            $errors->save();
            return redirect()->back()->with('message','Favor de ingresar un correo electrónico válido.');
        }
    }

    public function changePassword($token = null){
        if($token != null){
            $user = User::where('token','=',$token)->first();
            if($user != null){
                $data = array('id' => $user->id);
                return view('Outside.changePassword', $data);
            }
            else{
                $errors = ErrorLog::create([
                    'users_id' => 0,
                    'owner' => 'Error',
                    'description' => 'El correo es inválido o a vencido el tiempo de espera.'
                ]);
                $errors->save();
                return redirect('/')->with('message', 'El correo es inválido o a vencido el tiempo de espera.');
            }
        }
        else{
            $errors = ErrorLog::create([
                'users_id' => 0,
                'owner' => 'Error',
                'description' => 'No cuenta con token para el cambio de la contraseña.'
            ]);
            $errors->save();
            return redirect('/');
        }
    }

    public function saveNewPassword(Request $request){
        $password = $request->password;
        $cPassword = $request->cPassword;
        $user = User::find($request->id);
        if($password != null && $cPassword != null){
            if($password == $cPassword){
                $user->password = Hash::make($password);
                $user->save();
                return redirect('/')->with('message','Se ha guardado su nueva contraseña');
            }
            else{
                $errors = ErrorLog::create([
                    'users_id' => $user->id,
                    'owner' => $user->owner,
                    'description' => 'El usuario: '.$user['name'].' quiso cambiar la contraseña, pero las contraseñas no son identicas.'
                ]);
                $errors->save();
                return redirect()->back()->with('message', 'Las contraseñas no son identicas.');
            }
        }
    }

    public function authenticate(Request $request){
        $credentials = $request->only('name', 'password');
        if (Auth::attempt($credentials)) {
            $user = User::where('name','=',$credentials['name'])->first();
            $role = Role::where('id','=',$user['rolesEC_id'])->first();
            session(['user_agent' =>$role['code']]);
            session(['user_id' => $user['id']]);
            session(['user' => $user['owner']]);
            return redirect('/');
        } 
        else{
            $errors = ErrorLog::create([
                'users_id' => 0,
                'owner' => $credentials['name'],
                'description' => 'El usuario quiso loggearse con el usuario: '.$credentials['name'].' y la contraseña: '.$credentials['password'].' siendo uno de estos o ambos erróneos'
            ]);
            $errors->save();

            return redirect()->back()->with('message','Tu Usuario o Contraseña no fue correcta favor de ingresarla nuevamente.');
        }

    }

    public function logout(){
        Auth::logout();
        return redirect()->intended('/');
    }
}
