<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Article;

class ArticleController extends Controller
{
	function published() {
		return view("published", ["rows" => Article::published()->get()]);
	}

	function index() {
		$all = Article::all()->groupBy("status");

		$args = [
			"drafts" => $all[Article::STATUS_DRAFT] ?? null,
			"pending" => $all[Article::STATUS_PENDING] ?? null,
			"published" => $all[Article::STATUS_PUBLISHED] ?? null,
			"archive" => $all[Article::STATUS_ARCHIVE] ?? null
		];

		return view("articles", $args);
	}

	function add() {
		return view("add_article_form");
	}

	function view(Article $article) {
		return view("article", [
			"article" => $article->load([
				"comments" => function($query) { $query->published()->recent(); }
			])
		]);
	}

	function edit(Article $article) {
		return view("edit_article_form", ["article" => $article]);
	}

	function store(Request $request) {
		$request->validate([
			"id" => "nullable|exists:articles",
			"title" => "required",
			"description" => "nullable",
			"content" => "required",
			"status" => "required",
			"publish_at" => "nullable",
			"unpublish_at" => "nullable"
		], [
			"name" => "Публикация должна иметь название.",
			"content" => "Публикация должна иметь текст."
		]);

		$arr = $request;

		if ($arr->status == Article::STATUS_PENDING and !$arr->publish_at) {
			return back()->withInput()->withErrors([
				"publish_at" => "Должны быть указаны дата и время публикации."
			]);
		}

		$article = Article::find($arr->id) ?? new Article;
		$article->title = $arr->title;
		$article->description = $arr->description ?? explode(".", $arr->content)[0];
		$article->content = $arr->content;
		$article->status = $arr->status;
		$article->publish_at = $arr->publish_at ?? ($arr->status == Article::STATUS_PUBLISHED ? now() : null);
		$article->unpublish_at = $arr->unpublish_at;
		$article->save();

		return view("success");
	}

	function comment(Article $article, Request $request) {
		$request->validate([
			"name" => "required",
			"email" => "required|email",
			"content" => "required"
		], [
			"name" => "Укажите ваше имя.",
			"email" => "Укажите ваш email.",
			"content" => "Введите комментарий."
		]);

		$arr = $request;

		$article->comments()->create([
			"name" => $arr->name,
			"email" => $arr->email,
			"content" => $arr->content
		]);

		return view("success");
	}

	function drop(Article $article) {
		$article->delete();

		return view("success");
	}
}