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

namespace App\Nova;

use Acme\MultilangText\MultilangText;
use Acme\MultilangTextarea\MultilangTextarea;
use App\Models\Country;
use App\Models\Language;
use App\Nova\Repeater\ArticleSection;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Laravel\Nova\Fields\Boolean;
use Laravel\Nova\Fields\Heading;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Image;
use Laravel\Nova\Fields\Repeater;
use Laravel\Nova\Fields\Select;
use Laravel\Nova\Fields\Slug;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Http\Requests\NovaRequest;
use Oneduo\NovaFileManager\FileManager;
use Outl1ne\DependencyContainer\DependencyContainer;
use Whitecube\NovaFlexibleContent\Flexible;

class Post extends Resource
{
    /**
     * The model the resource corresponds to.
     *
     * @var class-string<\App\Models\Post>
     */
    public static $model = \App\Models\Post::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',
        'type',
        'data',
    ];
    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');
        return [
            ID::make()->sortable()->hide(),
            Boolean::make(__('Visibility'), 'is_enabled'),
            Slug::make(__('Slug'),'slug')
                ->creationRules('unique:posts,slug')
                ->placeholder('challenges_of_the_21st_century'),
            Select::make(__('Type'), 'type')
                ->rules('required')
                ->options(config('posts.types')),
            Heading::make('Preview'),
            MultilangText::make(__('Preview Title'), 'data->preview_title')
                ->placeholder('Challenges of the 21st century')
                ->slice(25)
                ->required()
                ->fullWidth()
                ->languages($languages)
                ->countries($countries)
                ->uploadLink($uploadLink),
            FileManager::make(__('Preview image'), 'data->preview_image'),
            MultilangText::make('Time to read', 'time_to_read')->placeholder('5 min to read')->fullWidth()->languages($languages)->countries($countries),
            Heading::make('First screen'),
//            Text::make('Title', 'title'),
            MultilangText::make('Title', 'title')->placeholder('Challenges of the 21st century')->slice(25)->required()->fullWidth()->languages($languages)->countries($countries)->uploadLink($uploadLink),
            FileManager::make(__('Title Image'), 'title_image'),
            MultilangText::make(__('Button text'), 'data->button_text')->placeholder('Challenges of the 21st century')->slice(25)->required()->fullWidth()->languages($languages)->countries($countries)->uploadLink($uploadLink),

            MultilangTextarea::make(__('Text'), 'data->up_text')
                ->fullWidth()
                ->hideFromIndex()
                ->languages($languages)
                ->countries($countries)
                ->uploadLink($uploadLink),
            Flexible::make('Article text section', 'data->section_text')
                ->addLayout('Section', 'section', [
                    FileManager::make(__('Image'), 'image')
                        ->hideFromIndex(),
                    MultilangTextarea::make(__('Text'), 'text')
                        ->fullWidth()
                        ->hideFromIndex()
                        ->languages($languages)
                        ->countries($countries)
                        ->uploadLink($uploadLink),
                ])->fullWidth(),
            MultilangTextarea::make('Article down text', 'data->down_text')
                ->fullWidth()
                ->hideFromIndex()
                ->languages($languages)
                ->countries($countries)
                ->uploadLink($uploadLink),
        ];
    }

    public function articleFields($languages, $countries, $uploadLink)
    {
        return [
            MultilangTextarea::make(__('Content'), 'data->up_text')
                ->fullWidth()
                ->hideFromIndex()
                ->languages($languages)
                ->countries($countries)
                ->uploadLink($uploadLink),
            Repeater::make('Line Items', 'data->section_text')
                ->repeatables([
                    ArticleSection::make()
                ]),
            Flexible::make('Countries', 'data->section_text')
                ->addLayout('Country', 'country', [
                    MultilangTextarea::make(__('Content'), 'text')
                        ->fullWidth()
                        ->hideFromIndex()
                        ->languages($languages)
                        ->countries($countries)
                        ->uploadLink($uploadLink),
                    FileManager::make(__('Country icon'), 'image')
                        ->hideFromIndex(),
                ])->fullWidth(),
            MultilangTextarea::make(__('Content'), 'data->down_text')
                ->fullWidth()
                ->hideFromIndex()
                ->languages($languages)
                ->countries($countries)
                ->uploadLink($uploadLink),
        ];
    }

    public function newsFields($languages, $countries, $uploadLink)
    {
        return [
            MultilangTextarea::make(__('Content'), 'data->text')
                ->fullWidth()
                ->hideFromIndex()
                ->languages($languages)
                ->countries($countries)
                ->uploadLink($uploadLink),
        ];
    }

    /**
     * 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 [];
    }
}