<?php

namespace App\Http\Controllers;

use App\Models\EliteShips;
use App\Models\Ships;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Str;
use Illuminate\Http\Request;

class ShipsController extends Controller
{
    public function index(){
        $ships = \App\Models\Ships::sortable()->paginate(10);
        $eliteShips = EliteShips::all();
        $sortedEliteShips = Arr::sort($eliteShips, function($eliteShip)
        {
            // Sort ships by their name.
            return $eliteShip->shipName;
        });
        return view('ships.index', ['ships'=>$ships,'eliteShips'=>$sortedEliteShips]);
    }

    public function add(Request $request){

        $eliteShips = DB::table('elite_ships');

        if($request->input('addShip')) {
            try {
                $ship = new Ships;
                $ship->id = Str::uuid()->toString();
                $ship->shipId = strtoupper(request('shipId'));
                $ship->shipName = request('shipName');
                $ship->shipOwner = request('shipOwner');
                $ship->shipType = request('shipType');
//                $ship->shipClass = $eliteShips->where('shipName', request('shipType'));
                $ship->shipClass = $eliteShips->where('shipName', request('shipType'))->value('shipClass');
                $ship->created_at = now();
                $ship->save();
            }catch(\Exception $e){
                session()->flash('error', 'Failed to create record.');
                Log::error($e);
                return redirect('/');

            }
            session()->flash('success', 'Record created successfully.');
            return redirect('/');
        }

        if($request->input('deleteShip')) {
            try {
                DB::table('ships')->where('id', $request->get('deleteShip'))->delete();
            }catch(\Exception $e){
                Log::error($e);
                session()->flash('error', 'Failed to delete record.');
                return redirect('/');
            }

            session()->flash('success', 'Record deleted successfully.');
            return redirect('/');
        }

        if($request->input('editShip')) {
            try {
                DB::table('ships')->where('id', $request->get('editShip'))->update(array(
                    'shipId' => strtoupper(request('shipId')),
                    'shipName' => request('shipName'),
                    'shipOwner' => request('shipOwner'),
                    'shipType' => request('shipType'),
//                    'shipClass' => $eliteShips->where('shipName', request('shipType')),
                    'shipClass' => $eliteShips->where('shipName', request('shipType'))->value('shipClass'),
                ));
            }catch(\Exception $e){
                Log::error($e);
                session()->flash('error', 'Failed to update record. Is it possible that the ship ID is not unique?');
                return redirect('/');
            }

            session()->flash('success', 'Record edited successfully.');
            return redirect('/');
        }

    }
}