<?php

/*
 * This file is part of Cachet.
 *
 * (c) Alt Three Services Limited
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace CachetHQ\Cachet\Http\Controllers\Admin;

use CachetHQ\Cachet\Http\Controllers\AbstractController;
use CachetHQ\Cachet\Models\User;
use GrahamCampbell\Binput\Facades\Binput;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\View;
use PragmaRX\Google2FA\Vendor\Laravel\Facade as Google2FA;

class UserController extends AbstractController
{
    /**
     * Shows the user view.
     *
     * @return \Illuminate\View\View
     */
    public function showUser()
    {
        return View::make('dashboard.user.index')->with([
            'page_title' => trans('dashboard.team.profile').' - '.trans('dashboard.dashboard'),
        ]);
    }

    /**
     * Updates the current user.
     *
     * @return \Illuminate\View\View
     */
    public function postUser()
    {
        $items = Binput::all();

        $passwordChange = array_get($items, 'password');
        $enable2FA = (bool) array_pull($items, 'google2fa');

        // Let's enable/disable auth
        if ($enable2FA && !Auth::user()->hasTwoFactor) {
            $items['google_2fa_secret'] = Google2FA::generateSecretKey();
        } elseif (!$enable2FA) {
            $items['google_2fa_secret'] = '';
        }

        if (trim($passwordChange) === '') {
            unset($items['password']);
        }

        $user = Auth::user();
        $user->update($items);

        if (!$user->isValid()) {
            return Redirect::back()->withInput(Binput::except('password'))
                ->with('title', sprintf(
                    '%s %s',
                    trans('dashboard.notifications.whoops'),
                    trans('dashboard.team.edit.failure')
                ))
                ->with('errors', $user->getErrors());
        }

        $successMsg = sprintf(
            '%s %s',
            trans('dashboard.notifications.awesome'),
            trans('dashboard.team.edit.success')
        );

        return Redirect::back()->with('success', $successMsg);
    }

    /**
     * Regenerates the users API key.
     *
     * @return \Illuminate\View\View
     */
    public function regenerateApiKey(User $user)
    {
        $user->api_key = User::generateApiKey();
        $user->save();

        return Redirect::back();
    }
}
