/**
  * Create a new event instance.
  *
  * @return void
  */
 public function __construct($user_id, $game_id)
 {
     $user = \App\Models\User::find($user_id);
     $game_user = \App\Models\Game_User::where('user_id', $user_id)->where('game_id', $game_id)->first();
     $game_user['has_left'] = true;
     $game_user->save();
     $game_users = \App\Models\Game_User::where('game_id', $game_id)->get();
     $cont = 0;
     foreach ($game_users as $game_user) {
         if ($game_user['has_left']) {
             $cont++;
         }
     }
     $user_list = \App\Models\Game_User::where('game_id', $game_id)->get();
     $msg = 'El jugador ' . $user->first_name . ' se ha rendido';
     if ($cont == count($user_list) - 1) {
         $winner = \App\Models\Game_User::where('has_left', '=', false)->where('game_id', $game_id)->first();
         $winner['has_won'] = true;
         $winner->save();
         $winner_name = \App\Models\User::find($winner['user_id']);
         $msg .= ', y El jugador ' . $winner_name->first_name . ' ha ganado';
     }
     $games = \App\Models\Game_User::where('game_id', $game_id)->where('user_id', $user_id)->first();
     if (!$games['has_left']) {
         $letters_user = \App\Models\Letter_User::where('game_id', '=', $game_id)->where('user_id', $user_id)->get(['letter_id']);
         foreach ($letters_user as $key) {
             $user_letters_save = \App\Models\Inventory_Letter_Game::where('game_id', $game_id)->where('letter_id', $key->letter_id)->first();
             $user_letters_save->quantity++;
             $user_letters_save->save();
         }
     }
     $this->data = ['game_id' => $game_id, 'msg' => $msg];
 }
 public static function random_letter($game_id)
 {
     if (self::have_turn($game_id)) {
         return response()->json(['errors' => true, 'msg' => 'NO es su turno.']);
     }
     $user_inventory = \App\Models\Letter_User::where('game_id', $game_id)->where('user_id', Auth::user()->id)->get();
     for ($i = 0; $i < 4; $i++) {
         $letter = $user_inventory->random();
         $letter_returned = \App\Models\Inventory_Letter_Game::where('letter_id', $letter->letter_id)->where('game_id', $game_id)->first();
         $letter_returned->quantity++;
         $letter_returned->save();
         $letter->delete();
     }
     self::cleanConsTurn($game_id);
     self::turn_pass($game_id);
     self::cleanConsTurn($game_id);
 }
 public static function validate_word($game_id)
 {
     $letters = \Input::get('letters');
     if (self::has_winner($game_id)) {
         $list = \App\Models\Game_User::where('game_id', $game_id)->where('has_won', 1)->first();
         $user_win = \App\Models\User::where('id', '=', $list->user_id)->first();
         $msg = 'Ya existe un ganador y es ' . $user_win->first_name . '.';
         return response()->json(['errors' => true, 'msg' => $msg]);
     }
     if (self::has_ended($game_id)) {
         return response()->json(['errors' => true, 'msg' => 'El juego termino']);
     }
     if (self::have_turn($game_id)) {
         return response()->json(['errors' => true, 'msg' => 'NO es su turno.']);
     }
     if (self::have_give_up($game_id)) {
         return response()->json(['errors' => true, 'msg' => 'Usted ya se rindió.']);
     }
     $game_users = \App\Models\Game_User::where('game_id', '=', $game_id)->get();
     $turn = 0;
     foreach ($game_users as $game_user) {
         $turn += \App\Models\Game_Board_User::where('game_user_id', '=', $game_user->id)->count();
     }
     $board = self::board_generate($game_id);
     foreach ($letters as $letter) {
         $board[$letter['x']][$letter['y']]['letter'] = $letter['letter'];
     }
     $word = '';
     foreach ($letters as $letter) {
         $word .= $letter['letter'];
     }
     if ($turn == 0) {
         if ($letters[0]['x'] != 8 || $letters[0]['y'] != 8) {
             return response()->json(['errors' => true, 'msg' => 'La posición es incorrecta']);
         } elseif (self::check_word($word)) {
             $points = 0;
             $word_mult = 0;
             foreach ($letters as $letter) {
                 $letter_id = \App\Models\Letter::where('letter', $letter['letter'])->get();
                 $game_user_id = \App\Models\Game_User::where('game_id', $game_id)->where('user_id', Auth::user()->id)->first();
                 \App\Models\Game_Board_User::create(['x' => $letter['x'], 'y' => $letter['y'], 'letter_id' => $letter_id[0]['id'], 'game_user_id' => $game_user_id['id']]);
                 if ($board[$letter['x']][$letter['y']]['type'] == 1) {
                     $points += $letter_id[0]['points'] * $board[$letter['x']][$letter['y']]['multiplier'];
                 } elseif ($board[$letter['x']][$letter['y']]['type'] == 2) {
                     $word_mult += $board[$letter['x']][$letter['y']]['multiplier'];
                     $points += $letter_id[0]['points'];
                 } else {
                     $points += $letter_id[0]['points'];
                 }
                 $inventory = \App\Models\Letter_User::where('game_id', $game_id)->where('letter_id', $letter_id[0]['id'])->first();
                 $inventory->delete();
             }
             $game_user_id = \App\Models\Game_User::where('game_id', $game_id)->where('user_id', Auth::user()->id)->first();
             if ($word_mult > 0) {
                 $points = $points * $word_mult;
             }
             $game_user_id['points'] += $points;
             $game_user_id->save();
             self::cleanConsTurn($game_id);
             self::turn_pass($game_id);
             self::cleanConsTurn($game_id);
             return response()->json(['errors' => false, 'msg' => 'La palabra es correcta']);
         } else {
             return response()->json(['errors' => true, 'msg' => 'La palabra no se encuentra en el diccionario']);
         }
     } else {
         $is_ok = true;
         for ($i = 1; $i < 16; $i++) {
             $word = '';
             for ($j = 1; $j < 16; $j++) {
                 if (is_string($board[$i][$j]['letter'])) {
                     $word .= $board[$i][$j]['letter'];
                 } elseif (is_string($board[$i][$j]['letter']['letter'])) {
                     $word .= $board[$i][$j]['letter']['letter'];
                 } elseif (strlen($word) > 1) {
                     if (!self::check_word($word)) {
                         $is_ok = false;
                     }
                 } else {
                     $word = '';
                 }
             }
             if (is_string($board[$i][$j - 1]['letter'])) {
                 if (strlen($word) > 1) {
                     if (!self::check_word($word)) {
                         $is_ok = false;
                     }
                 }
             } elseif (is_string($board[$i][$j - 1]['letter']['letter'])) {
                 if (strlen($word) > 1) {
                     if (!self::check_word($word)) {
                         $is_ok = false;
                     }
                 }
             }
         }
         for ($i = 1; $i < 16; $i++) {
             $word = '';
             for ($j = 1; $j < 16; $j++) {
                 if (is_string($board[$j][$i]['letter'])) {
                     $word .= $board[$j][$i]['letter'];
                 } elseif (is_string($board[$j][$i]['letter']['letter'])) {
                     $word .= $board[$j][$i]['letter']['letter'];
                 } elseif (strlen($word) > 1) {
                     if (!self::check_word($word)) {
                         $is_ok = false;
                     }
                 } else {
                     $word = '';
                 }
             }
             if (is_string($board[$j - 1][$i]['letter'])) {
                 if (strlen($word) > 1) {
                     if (!self::check_word($word)) {
                         $is_ok = false;
                     }
                 }
             } elseif (is_string($board[$j - 1][$i]['letter']['letter'])) {
                 if (strlen($word) > 1) {
                     if (!self::check_word($word)) {
                         $is_ok = false;
                     }
                 }
             }
         }
         if ($is_ok) {
             $points = 0;
             $word_mult = 0;
             foreach ($letters as $letter) {
                 $letter_id = \App\Models\Letter::where('letter', $letter['letter'])->get();
                 $game_user_id = \App\Models\Game_User::where('game_id', $game_id)->where('user_id', Auth::user()->id)->first();
                 \App\Models\Game_Board_User::create(['x' => $letter['x'], 'y' => $letter['y'], 'letter_id' => $letter_id[0]['id'], 'game_user_id' => $game_user_id['id']]);
                 if ($board[$letter['x']][$letter['y']]['type'] == 1) {
                     $points += $letter_id[0]['points'] * $board[$letter['x']][$letter['y']]['multiplier'];
                 } elseif ($board[$letter['x']][$letter['y']]['type'] == 2) {
                     $word_mult += $board[$letter['x']][$letter['y']]['multiplier'];
                     $points += $letter_id[0]['points'];
                 } else {
                     $points += $letter_id[0]['points'];
                 }
                 $inventory = \App\Models\Letter_User::where('game_id', $game_id)->where('letter_id', $letter_id[0]['id'])->first();
                 $inventory->delete();
             }
             $game_user_id = \App\Models\Game_User::where('game_id', $game_id)->where('user_id', Auth::user()->id)->first();
             if ($word_mult > 0) {
                 $points = $points * $word_mult;
             }
             $game_user_id['points'] += $points;
             $game_user_id->save();
             self::cleanConsTurn($game_id);
             self::turn_pass($game_id);
             self::cleanConsTurn($game_id);
             return response()->json(['errors' => false, 'msg' => 'La palabra es correcta']);
         } else {
             return response()->json(['errors' => true, 'msg' => 'La palabra no se encuentra en el diccionario']);
         }
     }
 }