<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Mail;
use Illuminate\Http\Request;
use Alert;

use App\User;
use App\Cuenta;
use App\Rol;

use App\Mail\NotificacionNuevoUsuario;

class UsuarioController extends Controller
{
    /**
    * Create a new controller instance.
    *
    * @return void
    */
    public function __construct()
    {
      $this->middleware('auth');
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        $usuarios = User::get();

        return view('usuarios.index')
        ->with('usuarios', $usuarios)
        ->with('e', $request->e);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create(Request $request)
    {
        $cuentas = Cuenta::orderBy('cuenta_cuenta')->where('tipo_id', '=', 1)->get();
        $roles = Rol::orderBy('rol_nombre')->get();

        return view('usuarios.create')
        ->with('roles', $roles)
        ->with('cuentas', $cuentas);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request, Cuenta $cuenta)
    {
        $this->validate($request, [
            'email' => 'unique:erc_usuarios',
        ]);

        $usuario = new User($request->all());
        $usuario->password = bcrypt('Erc123*');
        $usuario->enabled = 1; //estado activo
        $usuario->save();

        Mail::to($usuario->email)
        ->send(new NotificacionNuevoUsuario($usuario));

        Alert::success('<p>El usuario ha sido creado exitosamente. Las credenciales de acceso fueron enviadas a la dirección <b>'.$cuenta->cuenta_cuenta.'</b>.</p>', '¡Muy bien!')->html()->persistent();

        return redirect()->back();
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\User  $user
     * @return \Illuminate\Http\Response
     */
    public function show(User $usuario)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\User  $user
     * @return \Illuminate\Http\Response
     */
    public function edit(User $usuario)
    {
        $roles = Rol::orderBy('rol_nombre')->get();

        return view('usuarios.edit')
        ->with('roles', $roles)
        ->with('usuario', $usuario);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\User  $user
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, User $usuario)
    {
        $usuario->update($request->all());

        Alert::info('<p>El usuario ha sido actualizado.</p>')->html()->persistent();

        return redirect()->back();
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\User  $user
     * @return \Illuminate\Http\Response
     */
    public function destroy(User $usuario)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\User  $user
     * @return \Illuminate\Http\Response
     */
    public function profile(User $usuario)
    {
        $roles = Rol::orderBy('rol_nombre')->get();

        return view('usuarios.profile')
        ->with('roles', $roles)
        ->with('usuario', $usuario);
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\User  $user
     * @return \Illuminate\Http\Response
     */
    public function reset(Request $request, User $usuario)
    {
        if(Hash::check($request->lastpassword, $usuario->password))
        {
            if($request->confirmpassword == $request->newpassword)
            {
                $usuario->password = bcrypt($request->confirmpassword);
                $usuario->update();

                Alert::info('<p>La contraseña ha sido modificada exitosamente.</p>')->html()->persistent();
            }
            else
            {
                Alert::error('<p>La nueva contraseña no ha sido confirmada correctamente. ¡Inténtelo nuevamente!.</p>')->html()->persistent();
            }
        }
        else
        {
            Alert::error('<p>La contraseña actual no coincide con la contraseña del usuario de la sesión. ¡Inténtalo nuevamente!.</p>')->html()->persistent();
        }
        
        return redirect()->back();
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\User  $user
     * @return \Illuminate\Http\Response
     */
    public function enable(User $usuario)
    {
        $usuario->password = bcrypt('Erc123*');
        $usuario->update(['enabled' => '1']);

        Mail::to($usuario->email)
        ->send(new NotificacionNuevoUsuario($usuario));

        Alert::warning('<p>El usuario ha sido activado y la contraseña restablecida a la predeterminada.</p>')->html()->persistent();

        return redirect()->back();
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\User  $user
     * @return \Illuminate\Http\Response
     */
    public function disable(User $usuario)
    {
        $usuario->update(['enabled' => '0']);

        Alert::warning('<p>El usuario ha sido desactivado.</p>')->html()->persistent();

        return redirect()->back();
    }
}
