<?php


namespace App\Http\Controllers;


use App\Models\EmailConfirmation;
use App\Models\User;
use Hash;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use MightyPork\Utils\Str;

/**
 * Account settings
 */
class AccountController extends Controller
{
    public function editAccount()
    {
        return view('profile.edit-account', ['user' => user()]);
    }

    public function storeAccount(Request $request)
    {
        /** @var User $user */
        $user = user();

        $input = $this->validate($request, [
            'name' => [
                'required',
                VALI_NAME,
                Rule::unique('users')->ignoreModel($user),
            ],
            'email' => [
                'required',
                VALI_EMAIL,
                Rule::unique('users')->ignoreModel($user),
            ],
            'new_password' => ['nullable', 'confirmed', VALI_PASSWORD],
        ]);

        if ($input->email != $user->email) {
            $user->sendEmailConfirmationLink($input->email);

            flash()->warning("E-mail confirmation sent to $input->email.")->important();

            unset($input->email); // prevent updating the field in the model via fill
        }

        $user->fill($input->all());

        if ($input->has('new_password')) {
            $user->password = Hash::make($input->new_password);

            flash()->warning('Password changed');
        }

        $user->save();

        flash()->success('Settings saved');

        return back();
    }

    public function forgetSocialLogin($id)
    {
        $identity = user()->socialIdentities()->where('id', $id)->first();
        if (null === $identity) {
            abort(404, "No such identity");
        }

        $identity->delete();
        return redirect(route('profile.manage-oauth'));
    }
}