<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Auth;
use App\Contact;
use App\Jobs\ContactPipeline\ContactPipeline;
use App\Rules\MaxMultiLine;

class ContactController extends Controller
{
	public function show(Request $request)
	{
		abort_if(!config('instance.email') && !config('instance.contact.enabled'), 404);
		return view('site.contact');
	}
	
	public function store(Request $request)
	{
		abort_if(!config('instance.contact.enabled'), 404);
		abort_if(!Auth::check(), 403);

		$this->validate($request, [
			'message' => ['required', 'string', 'min:5', new MaxMultiLine('500')],
			'request_response' => 'string|max:3'
		]);

		$message = $request->input('message');
		$request_response = $request->input('request_response') == 'on' ? true : false;
		$user = Auth::user();

		$max = config('instance.contact.max_per_day');
		$contact = Contact::whereUserId($user->id)
			->whereDate('created_at', '>', now()->subDays($max))
			->count();

		if($contact >= $max) {
			return redirect()->back()->with('error', 'You have recently sent a message. Please try again later.');
		}

		$contact = new Contact;
		$contact->user_id = $user->id;
		$contact->response_requested = $request_response;
		$contact->message = $message;
		$contact->response = '';
		$contact->save();

		ContactPipeline::dispatch($contact);

		return redirect()->back()->with('status', 'Success - Your message has been sent to admins.');
	}
}