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

namespace App\Nova;

use Acme\MultilangText\MultilangText;
use Acme\MultilangTextarea\MultilangTextarea;
use App\Models\Country;
use App\Models\Language;
use App\Models\Product;
use App\Nova\Actions\AttachFlyerToCrop;
use App\Nova\Layouts\Resources\CropLayout;
use App\Nova\Layouts\Resources\CropTrialsLayout;
use Eminiarts\Tabs\Tab;
use Eminiarts\Tabs\Tabs;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Laravel\Nova\Fields\BelongsToMany;
use Laravel\Nova\Fields\Boolean;
use Laravel\Nova\Fields\BooleanGroup;
use Laravel\Nova\Fields\Heading;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Image;
use Laravel\Nova\Fields\MorphedByMany;
use Laravel\Nova\Fields\MultiSelect;
use Laravel\Nova\Fields\Select;
use Laravel\Nova\Fields\Slug;
use Laravel\Nova\Http\Requests\NovaRequest;
use Oneduo\NovaFileManager\FileManager;
use Whitecube\NovaFlexibleContent\Flexible;

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

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

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

    /**
     * Get the fields displayed by the resource.
     *
     * @param NovaRequest $request
     * @return array
     */
    public function fields(NovaRequest $request): array
    {
        $countries = Country::query()->get();
        $languages = Language::query()->get();
        $uploadLink = route('nova.fields.upload.image');
//        $trialCountries = [];
//        foreach ($countries as $country) {
//            $trialCountries[$country->code] =  $country->name;
//        }

        return [
            Tabs::make('Some Title', [
                Tab::make('General info', [
                    ID::make()->sortable()->hide(),
                    Boolean::make(__('Visibility'), 'is_enabled'),
                    Slug::make(__('Slug'),'slug')
                        ->placeholder('cereals'),
                    MultilangText::make(__('Title'), 'title')
                        ->required()
                        ->placeholder('Cereals')
                        ->slice(25)
                        ->fullWidth()
                        ->languages($languages)
                        ->countries($countries)
                        ->uploadLink($uploadLink),

                    FileManager::make(__('Icon'), 'icon'),
//                    Image::make(__('Icon'), 'icon') ->disk('public')
//                        ->disableDownload()
//                        ->deletable()
//                        ->prunable()
//                        ->path('crops')
//                        ->preview(function ($value, $disk) {
//                            return $value
//                                ? Storage::disk($disk)->url($value)
//                                : null;
//                        })
//                        ->thumbnail(function ($value, $disk) {
//                            return $value
//                                ? Storage::disk($disk)->url($value)
//                                : null;
//                        }),

//                    FileManager::make(__('Title Image'), 'title_image')
//                        ->hideFromIndex(),
//                    Image::make(__('Title Image'), 'title_image')
//                        ->disk('public')
//                        ->disableDownload()
//                        ->deletable()
//                        ->prunable()
//                        ->path('crops')
//                        ->preview(function ($value, $disk) {
//                            return $value
//                                ? Storage::disk($disk)->url($value)
//                                : null;
//                        })
//                        ->thumbnail(function ($value, $disk) {
//                            return $value
//                                ? Storage::disk($disk)->url($value)
//                                : null;
//                        }),
                ]),
                Tab::make(__('Crop nutrition program info'), [

                    FileManager::make(__('Title background'), 'fs_background->nutrition')
                        ->hideFromIndex(),
                    MultilangText::make('View button', 'fs_view_button->nutrition')->languages($languages)->countries($countries)->uploadLink($uploadLink)
                        ->fullWidth()
                        ->hideFromIndex(),
                    MultilangText::make('Sidebar text', 'sidebar_text->nutrition')->languages($languages)->countries($countries)->uploadLink($uploadLink)
                        ->fullWidth()
                        ->hideFromIndex(),
                    Flexible::make('Nutrition program content', 'detailed')
                        ->addLayout(CropLayout::class)
//                        ->limit(1)
                        ->button('New nutrition program')
                        ->fullWidth(),
                ]),
                Tab::make(__('Trial results'), [
                    FileManager::make(__('Title background'), 'fs_background->trials')
                        ->hideFromIndex(),
                    MultilangText::make('View button', 'fs_view_button->trials')->languages($languages)->countries($countries)->uploadLink($uploadLink)
                        ->fullWidth()
                        ->hideFromIndex(),
                    MultilangText::make('Sidebar text', 'sidebar_text->trials')->languages($languages)->countries($countries)->uploadLink($uploadLink)
                        ->fullWidth()
                        ->hideFromIndex(),
                    MultilangText::make('Show more text', 'sidebar_text->show_more')->languages($languages)->countries($countries)->uploadLink($uploadLink)
                        ->fullWidth()
                        ->hideFromIndex(),
//                    BooleanGroup::make('Field trial in countries', 'trial_countries')->options($trialCountries),
//                    Flexible::make('', 'trials')
//                        ->addLayout(CropTrialsLayout::class)
//                        ->fullWidth(),
//                    BelongsToMany::make(__('Trial Results Flyers'), 'flyers', Flyer::class),
                    MorphedByMany::make(__('Trial Results Flyers'), 'flyers', Flyer::class)
                        ->fields(function ($request, $relatedModel) {
//                            dd($relatedModel);
                            $products = Product::query()->where('is_enabled', true)->get();
                            $options = [];
                            foreach ($products as $product) {
                                $options[$product->id] = $product->system_name;
                            }
                            if ($this->product_id) {
//                                dd($this->product_id);

                            }
//                            dd($options);
                            return [
                                Select::make('Product', 'product_id')->options($options)->displayUsingLabels()->required(),
                            ];
                        }),
                ]),
            ]),
//            BelongsToMany::make(__('Field trial in countries'), 'countries', \App\Nova\Country::class)
        ];
    }

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

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

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

    /**
     * Get the actions available for the resource.
     *
     * @param NovaRequest $request
     * @return array
     */
    public function actions(NovaRequest $request)
    {
        return [
            (new AttachFlyerToCrop())->onlyOnDetail(),
        ];
    }
}