<?php

namespace App\Http\Controllers\Settings;

use App\Models\Page;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Requests\Pages\IndexPageRequest;
use App\Http\Requests\Pages\UpdatePageRequest;
use Illuminate\View\View;
use Illuminate\Http\RedirectResponse;
use App\Exceptions\GeneralException;
use App\Events\Pages\PageUpdated;
use Illuminate\Support\Facades\DB;

class PageController extends Controller
{
    /**
     * Associated Repository Model.
     */
    const MODEL = Page::class;

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(IndexPageRequest $request): View
    {
        return view('settings.page.index');
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\Page  $page
     * @return \Illuminate\Http\Response
     */
    public function show(Page $page)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\Page  $page
     * @return \Illuminate\Http\Response
     */
    public function edit(Page $page)
    {
        $languages = DB::table('languages')
        ->where('active', true)
        ->pluck('part2_t', 'part2_t');

        return view('settings.page.edit', compact('page', 'languages'));
        // ->withPage($page);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param \App\Http\Requests\Pages\UpdatePageRequest $request
      * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(UpdatePageRequest $request, $id)
    {
        $page = Page::findOrFail($id);
        // $this->pages->update($page, $request->except(['_method', '_token']));
        $input = $request
        ->except(['_method', '_token', 'nav-tab', 'en_title', 'en_description', 'de_title', 'de_description']);
         // Making extra fields
        //$input['page_slug'] = str_slug($input['title']);
        $input['status'] = isset($input['status']) ? 1 : 0;
        $input['updated_by'] = \Auth::user()->id;

        $article_data = [
            'en' => [
                'title'       => $request->input('en_title'),
                'description' => $request->input('en_description')
            ],
            'de' => [
                'title'       => $request->input('de_title'),
                'description' => $request->input('de_description')
            ],
         ];
         $ergebnis = array_merge($input, $article_data);

        if ($page->update($ergebnis)) {
            event(new PageUpdated($page));

            return redirect()
                ->route('settings.page.index')
                ->with('flash_message', trans('alerts.backend.pages.updated'));
        }
        throw new GeneralException(trans('exceptions.backend.pages.update_error'));
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\Page  $page
     * @return \Illuminate\Http\Response
     */
    public function destroy(Page $page)
    {
        //
    }

    public function query()
    {
        return call_user_func(static::MODEL.'::query');
    }
}