<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Models\Game;
use App\Models\Game_genre;
use App\Models\Genre;
use App\Models\Comment;
use App\Models\Review;

class GameController extends Controller
{
  // Переход по страницам
  function all() { return view('games/all', ['games' => Game::with('genre')->orderBy('created_at', 'desc')->get()]); }
  function view_insert() { return view('games/insert', ['genres' => Genre::all()]); }
  function view_update(Request $request) {
    $games = Game::with('genre')->find($request->update);
    $genres = Genre::all();
    foreach ($genres as $genre) {
      foreach ($games->genre as $g) {
        if ($genre->id == $g->id) $genre->checed = "true";
      }
    }

    return view('games/update', ['game' => $games, 'genres' => $genres]);
  }

  function insert(Request $request) { // Добавить
    $request->validate([ 'title' => 'required', 'release_date' => 'required' ], [ 'title.required' => 'Поле "название" не заполнено', 'release_date.required' => 'Поле "Дата релиза" не заполнено', ]);

    $game = new Game;
    $game->title = $request->input("title");
    $game->description = $request->input("description");
    $game->release_date = $request->input("release_date");
    $game->save();

    $genres = Genre::all();
    for ($i = 0; $i < count($genres); $i++)
      if ($request->input($genres[$i]->id) == 'on') {
        $game_g = new Game_genre;
        $game_g->game_id = $game->id;
        $game_g->genre_id = $genres[$i]->id;
        $game_g->save();
      }

    return back()->with('message', 'Игра добавлена!');
  }


  function update(Request $request){ // Изменить
    $request->validate([
      'title' => 'required',
      'release_date' => 'required',
    ], [
      'title.required' => 'Поле "название" не заполнено',
      'release_date.required' => 'Поле "Дата релиза" не заполнено',
    ]);

    $game = Game::with('genre')->find($request->input("id"));

    $genres = Genre::all();
    for ($i = 0; $i < count($genres); $i++)
      if ($request->input($genres[$i]->id) == 'on') {
        if (count(Game_genre::where('game_id', $game->id)->where('genre_id', $genres[$i]->id)->get()) == 0){
          $game_g = new Game_genre;
          $game_g->game_id = $game->id;
          $game_g->genre_id = $genres[$i]->id;
          $game_g->save();
        }
      }

    for ($i = 0; $i < count($game->genre); $i++)
      if ($request->input($game->genre[$i]->id) != 'on')
        Game_genre::where('game_id', $game->id)->where('genre_id', $game->genre[$i]->id)->delete();

    $game = Game::find($request->input("id"));
    $game->title = $request->input("title");
    $game->description = $request->input("description");
    $game->release_date = $request->input("release_date");
    $game->save();

    return back()->with('message', 'Игра обновлена!');
  }

  function delete(Request $request){
    $reviews = Review::where('game_id', $request->delete)->get();
    foreach ($reviews as $review) Comment::where('post_type', 'use App\Models\Game;')->where('post_id', $review->id)->delete();
    Review::where('game_id', $request->delete)->delete();
    Game_genre::where('game_id', $request->delete)->delete();
    Game::where('id', $request->delete)->delete();
    return back();
  }
}