/home/bdqbpbxa/api-uniferx.goodface.com.ua/app/Nova/Page.php
<?php

namespace App\Nova;

use Acme\MultilangText\MultilangText;
use Acme\MultilangTextarea\MultilangTextarea;
use App\Models\Country;
use App\Models\Language;
use App\Nova\Helpers\ResourceFieldHelper;
use App\Nova\Layouts\Pages\AboutLayout;
use App\Nova\Layouts\Pages\AnonymousLayout;
use App\Nova\Layouts\Pages\BlogLayout;
use App\Nova\Layouts\Pages\CareerLayout;
use App\Nova\Layouts\Pages\ContactsLayout;
use App\Nova\Layouts\Pages\CropNutritionLayout;
use App\Nova\Layouts\Pages\HomepageLayout;
use App\Nova\Layouts\Pages\InformationMaterialsLayout;
use App\Nova\Layouts\Pages\MenuLayout;
use App\Nova\Layouts\Pages\ProductsLayout;
use App\Nova\Layouts\Pages\ResourcesLayout;
use App\Nova\Layouts\Pages\TrialResultsLayout;
use App\Nova\Layouts\Pages\VacanciesLayout;
use App\Nova\Repeater\Homepage;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Storage;
use Laravel\Nova\Fields\BelongsToMany;
use Laravel\Nova\Fields\Heading;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Image;
use Laravel\Nova\Fields\MorphedByMany;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Http\Requests\NovaRequest;
use Whitecube\NovaFlexibleContent\Flexible;

class Page extends Resource
{
    /**
     * The model the resource corresponds to.
     *
     * @var class-string<\App\Models\Page>
     */
    public static $model = \App\Models\Page::class;

    /**
     * The single value that should be used to represent the resource when being displayed.
     *
     * @var string
     */
    public static $title = 'name';

    /**
     * The columns that should be searched.
     *
     * @var array
     */
    public static $search = [
        'name',
    ];
    public static $trafficCop = false;

    /**
     * Get the fields displayed by the resource.
     *
     * @param  \Laravel\Nova\Http\Requests\NovaRequest  $request
     * @return array
     */
    public function fields(NovaRequest $request)
    {
        $countries = Country::query()->get();
        $languages = Language::query()->get();
        $uploadLink = route('nova.fields.upload.image');
        return $this->pageFields();
    }

    public static function indexQuery(NovaRequest $request, $query)
    {
        return $query->where('name', '!=', 'Anonymous feedback');
    }

    public function pageFields()
    {
        $fields = match ($this->name) {
//            'Blog' => BlogLayout::class,
//            'Career' => CareerLayout::class,
//            'Resources' => ResourcesLayout::class,
//            'Crop nutrition programs' => CropNutritionLayout::class,
//            'Trial results' => TrialResultsLayout::class,
//            'Information materials' => InformationMaterialsLayout::class,
//            'Products' => ProductsLayout::class,
//            default => new HomepageLayout(),
            'Blog' => ResourceFieldHelper::blogPageFields(),
            'Career' => ResourceFieldHelper::careerPageFields(),
            'Resources' => ResourceFieldHelper::resourcesPageFields(),
            'Crop nutrition programs' => ResourceFieldHelper::cropNutritionPageFields(),
            'Trial results' => ResourceFieldHelper::trialResultsPageFields(),
            'Information materials' => ResourceFieldHelper::informationMaterialsPageFields(),
            'Products' => ResourceFieldHelper::productPageFields(),
            'General Translations' => ResourceFieldHelper::generalTranslationFields(),
            'About us' => ResourceFieldHelper::aboutUsFields(),
            'Contacts' => ResourceFieldHelper::contactsFields(),
            'Terms Conditions' => ResourceFieldHelper::termsConditionsFields(),
            'Anonymous feedback' => ResourceFieldHelper::anonymousFeedbackFields(),
            'Legal info' => ResourceFieldHelper::legalInfoFields(),
            default => ResourceFieldHelper::homePageFields(),
        };
        $fields[] = ID::make()->sortable()->hide();
        $fields[] = Text::make(__('Name'), 'name')
                ->sortable(true)
                ->onlyOnIndex();
        $fields[] = BelongsToMany::make(__('Crops'), 'crops')
            ->canSee(function () {
                return match ($this->name) {
                    'Crop nutrition programs', 'Trial results' => true,
                    default => false,
                };
            });
//        $fields[] = MorphedByMany::make(__('Flyers'), 'flyers', Flyer::class)
//            ->canSee(function () {
//                return match ($this->name) {
//                    'Information materials' => true,
//                    default => false,
//                };
//            });
        $fields[] = MorphedByMany::make(__('Catalogs'), 'Catalogs', Catalog::class)
            ->canSee(function () {
                return match ($this->name) {
                    'Information materials' => true,
                    default => false,
                };
            });
        $fields[] = BelongsToMany::make('Employees', 'employees', Employee::class)
            ->canSee(function () {
                return match ($this->name) {
                    'About us' => true,
                    default => false,
                };
            });
        return $fields;
    }

    public static function afterUpdate(NovaRequest $request, Model $model)
    {
//        dd($request->all());
    }

    /**
     * Get the cards available for the request.
     *
     * @param  \Laravel\Nova\Http\Requests\NovaRequest  $request
     * @return array
     */
    public function cards(NovaRequest $request)
    {
        return [];
    }

    /**
     * Get the filters available for the resource.
     *
     * @param  \Laravel\Nova\Http\Requests\NovaRequest  $request
     * @return array
     */
    public function filters(NovaRequest $request)
    {
        return [];
    }

    /**
     * Get the lenses available for the resource.
     *
     * @param  \Laravel\Nova\Http\Requests\NovaRequest  $request
     * @return array
     */
    public function lenses(NovaRequest $request)
    {
        return [];
    }

    /**
     * Get the actions available for the resource.
     *
     * @param  \Laravel\Nova\Http\Requests\NovaRequest  $request
     * @return array
     */
    public function actions(NovaRequest $request)
    {
        return [];
    }
}