<?php

namespace App\Http\Controllers\Api;

use App\Models\GenericBackoffice\Entry;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Requests\Api\BaseShow;
use App\Http\Resources\Entry as EntryResource;
use Illuminate\Pagination\LengthAwarePaginator;
use App\Facades\Services\BackendUserService;
use App\Models\Block;
use App\Http\Resources\Block as ResourceBlock;
use App\Exceptions\ApiHttpException;

class EntryController extends Controller
{

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show(BaseShow $request)
    {
        // Retrieve the validated input data...
        $data = $request->validated();
        $user = BackendUserService::getLoggedUser();
        $entryQuery = Entry::full()
            ->select('*')
            ->with([
                'metaImage',
                'blocks' => function($query) use ($user) {
                    $query->full()
                        ->with([
                            'image' => function($query) {
                                $query->where('language_id', getActiveLanguage());
                            },
                            'tariffs' => function($query) {
                                $query->orderBy('block_tariff.position', 'asc');
                            },
                            'slider' => function($query) {
                                $query->orderBy('block_slider_item.position', 'asc');
                                $query->with(['image' => function($query) {
                                    $query->where('media_item_slider_item.language_id', getActiveLanguage());
                                }]);
                            }
                        ])
                        ->select('*')
                        ->orderBy('block_entry.position', 'asc');
                    if (!$user) {
                        $query->with('websites')->where('status', 'published');
                    }
                },
            ]);
        if (!$user) {
            $entryQuery->with('websites')->where('status', 'published');
        };
 
        if ($data['sub_entity'] !== "") {
            $slug = '/' . $data['slug'] . '/' . $data['sub_entity'];
            $entryQuery->where('lang_uri', $slug);
        } else {
            $entryQuery->where('lang_slug', $data['slug']);
        }
        $entry = $entryQuery->first();
        if (empty($entry)) {
            throw new ApiHttpException(404, 'not_found');
        }

        return new EntryResource($entry, true);
    }

    public function getBlock($blockSlug) {
        $user = BackendUserService::getLoggedUser();

        $query = Block::full()
            ->with([
                'image' => function($query) {
                    $query->where('language_id', getActiveLanguage());
                },
                'tariffs' => function($query) {
                    $query->orderBy('block_tariff.position', 'asc');
                },
                'slider' => function($query) {
                    $query->orderBy('block_slider_item.position', 'asc');
                    $query->with(['image' => function($query) {
                        $query->where('media_item_slider_item.language_id', getActiveLanguage());
                    }]);
                }
            ])
            ->select('*')
            ->where('lang_slug', $blockSlug);
        
        if (!$user) {
            $query->with('websites')->where('status', 'published');
        };

        $block = $query->first();
        
        if (!$block) {
            return;
        }
        return new ResourceBlock($block);
    }
}
