<?php

namespace App\Http\Controllers;

use Illuminate\Auth\Events\Registered;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;

use App\Http\Requests\UserRequest;
use App\Models\{Address,User};

class UserController extends Controller
{
	/**
	 * Add or edit a node
	 */
	public function add_edit(UserRequest $request,User $o)
	{
		if ($request->post()) {
			foreach (['name','email','pgp_pubkey','active','admin','alias','system_id'] as $key)
				$o->{$key} = $request->post($key);

			if (! $o->exists)
				$o->password = base64_encode(random_bytes(20));
			elseif ($request->password)
				$o->password = Hash::make($request->password);

			$o->save();

			if ($o->wasRecentlyCreated)
				event(new Registered($o));

			return redirect()
				->to('user/addedit/'.$o->id)
				->with('success','User Updated');
		}

		return view('user.addedit')
			->with('o',$o);
	}

	public function link(Request $request)
	{
		if ($request->post()) {
			$request->validate([
				'address_id'=>'required|exists:addresses,id',
				'code'=>'required:string',
			]);

			$ao = Address::findOrFail($request->address_id);
			if ($ao->activation_check(Auth::user(),$request->code)) {
				$ao->validated = TRUE;
				$ao->save();

				$ao->system->users()->save(Auth::user());

				return redirect()->to('/');

			} else {
				$validator = Validator::make([],[]);
				$validator->errors()->add(
					'code', 'Invalid Code!'
				);

				return back()->withErrors($validator);
			}
		}

		return view('user.link');
	}
}