<?php

declare(strict_types=1);


namespace App\Filament\Resources\Comments\Tables;

use App\Models\Comment;
use Filament\Actions\Action;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Filters\SelectFilter;
use Filament\Tables\Table;

class CommentsTable
{
    public static function configure(Table $table): Table
    {
        return $table
            ->columns([
                TextColumn::make('author_name')
                    ->label('作者')
                    ->searchable()
                    ->weight('bold'),
                TextColumn::make('content')
                    ->label('内容')
                    ->limit(60)
                    ->searchable(),
                TextColumn::make('post.title')
                    ->label('文章')
                    ->limit(30)
                    ->url(fn ($record) => $record->post ? route('posts.show', $record->post->slug ?: $record->post->id) : null)
                    ->openUrlInNewTab(),
                TextColumn::make('status')
                    ->label('状态')
                    ->badge()
                    ->formatStateUsing(fn ($state) => match ($state) {
                        'published' => '已发布',
                        'pending' => '待审核',
                        'spam' => '垃圾',
                        'rejected' => '已拒绝',
                        default => $state,
                    })
                    ->color(fn ($state) => match ($state) {
                        'published' => 'success',
                        'pending' => 'warning',
                        'spam' => 'danger',
                        default => 'gray',
                    }),
                TextColumn::make('ip')
                    ->label('IP'),
                TextColumn::make('created_at')
                    ->label('时间')
                    ->dateTime('Y-m-d H:i')
                    ->sortable(),
            ])
            ->filters([
                SelectFilter::make('status')
                    ->label('状态')
                    ->options([
                        'published' => '已发布',
                        'pending' => '待审核',
                        'spam' => '垃圾',
                        'rejected' => '已拒绝',
                    ]),
            ], \Filament\Tables\Enums\FiltersLayout::AboveContent)
            ->recordActions([
                Action::make('approve')
                    ->label('通过')
                    ->icon('heroicon-o-check')
                    ->color('success')
                    ->visible(fn (Comment $record) => $record->status !== 'published')
                    ->action(function (Comment $record): void {
                        $record->update(['status' => 'published']);
                        $record->post?->increment('comment_count');
                    }),
                Action::make('spam')
                    ->label('垃圾')
                    ->icon('heroicon-o-x-mark')
                    ->color('danger')
                    ->visible(fn (Comment $record) => $record->status !== 'spam')
                    ->action(fn (Comment $record) => $record->update(['status' => 'spam'])),
                EditAction::make(),
            ])
            ->toolbarActions([
                BulkActionGroup::make([
                    DeleteBulkAction::make(),
                ]),
            ])
            ->defaultSort('created_at', 'desc');
    }
}
