<?php

namespace App\Filament\Resources;

use App\Filament\Resources\SlideResource\Pages;
use App\Models\Language;
use App\Models\Slide;
use Filament\Forms\Components\FileUpload;
use Filament\Forms\Components\Group;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use App\Filament\Resources\PostResource\RelationManagers\TranslationsRelationManager;

class SlideResource extends Resource
{
    protected static ?string $model = Slide::class;
    protected static ?string $navigationGroup = 'Contents';
    protected static ?int $navigationSort = 2;
    protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';

    protected static ?string $modelLabel = 'Slide';

    public static function getModelLabel(): string
    {
        return __('slide.model_label');
    }

    public static function getPluralModelLabel(): string
    {
        return __('slide.plural_model_label');
    }

    public static function form(Form $form): Form
    {
        return $form
            ->schema([
                Group::make()
                    ->columns(3)
                    ->columnSpanFull()
                    ->schema([
                        Section::make(__('admin/slides.sections.slide'))
                            ->columnSpan(2)
                            ->schema([
                                TextInput::make('name')
                                    ->label(__('admin/slides.form.name'))
                                    ->required()
                                    ->maxLength(100)
                                    ->validationMessages([
                                        'required' => __('admin/slides.validation.name.required'),
                                        'max' => __('admin/slides.validation.name.max'),
                                    ]),

                                TextInput::make('order')
                                    ->label(__('admin/slides.form.order'))
                                    ->maxLength(2)
                                    ->validationMessages([
                                        'required' => __('admin/slides.validation.order.required'),
                                        'integer' => __('admin/slides.validation.order.integer'),
                                    ]),

                            ]),

                        Section::make(__('admin/slides.sections.image'))
                            ->columnSpan(1)
                            ->schema([
                                FileUpload::make('image')
                                    ->label(__('admin/slides.form.image'))
                                    ->nullable()
                                    ->directory('slides')
                                    ->acceptedFileTypes(['image/*'])
                                    ->disk('public'),

                                FileUpload::make('video')
                                    ->label(__('admin/slides.form.video'))
                                    ->nullable()
                                    ->directory('slides/videos')
                                    ->acceptedFileTypes(['video/*'])
                                    ->maxSize(100 * 1024)
                                    ->helperText(__('admin/slides.form.video_help'))
                                    ->disk('public'),

                                Toggle::make('is_active')
                                    ->label(__('admin/slides.form.is_active'))
                                    ->default(true),

                            ]),
                    ]),
            ]);
    }

    public static function table(Table $table): Table
    {
        return $table
            ->columns([
                Tables\Columns\TextColumn::make('name')
                    ->label(__('admin/slides.table.name')),
                Tables\Columns\ImageColumn::make('image')
                    ->label(__('admin/slides.table.image')),
                Tables\Columns\TextColumn::make('video')
                    ->label(__('admin/slides.table.video'))
                    ->formatStateUsing(fn ($state) => $state ? '✓' : '✗')
                    ->badge()
                    ->color(fn ($state) => $state ? 'success' : 'danger'),
                Tables\Columns\ToggleColumn::make('is_active')
                    ->label(__('admin/slides.table.is_active')),
                Tables\Columns\TextColumn::make('order')
                    ->label(__('admin/slides.table.order')),
            ])
            ->filters([
                //
            ])
            ->actions([
                Tables\Actions\EditAction::make()
                    ->label(__('admin/slides.edit')),
            ])
            ->bulkActions([
                Tables\Actions\BulkActionGroup::make([
                    Tables\Actions\DeleteBulkAction::make(),
                ]),
            ]);
    }

    public static function getRelations(): array
    {
        return [
            TranslationsRelationManager::class,
        ];
    }

    public static function getPages(): array
    {
        return [
            'index' => Pages\ListSlides::route('/'),
            'create' => Pages\CreateSlide::route('/create'),
            'edit' => Pages\EditSlide::route('/{record}/edit'),
        ];
    }

    public static function getMessages(): array
    {
        return [
            'created' => __('admin/slides.messages.created'),
            'updated' => __('admin/slides.messages.updated'),
            'deleted' => __('admin/actions.delete.messages.deleted'),
        ];
    }
}
