<?php

declare(strict_types=1);

namespace App\Filament\Resources\Posts\RelationManagers;

use App\Models\Comment;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Textarea;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Tables\Actions\Action;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;

class CommentsRelationManager extends RelationManager
{
    protected static string $relationship = 'comments';

    protected static ?string $title = '相关评论';

    protected static ?string $modelLabel = '评论';

    protected static ?string $pluralModelLabel = '评论';

    public function form(\Filament\Schemas\Schema $schema): \Filament\Schemas\Schema
    {
        return $schema
            ->components([
                TextInput::make('author_name')->label('昵称')->disabled(),
                TextInput::make('author_email')->label('邮箱')->disabled(),
                TextInput::make('author_url')->label('网址')->disabled(),
                Textarea::make('content')->label('内容')->disabled()->rows(4),
            ]);
    }

    public function table(Table $table): Table
    {
        return $table
            ->columns([
                TextColumn::make('author_name')->label('昵称'),
                TextColumn::make('content')->label('内容')->limit(40),
                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',
                        'rejected' => 'gray',
                        default => 'gray',
                    }),
                TextColumn::make('created_at')->label('时间')->dateTime('Y-m-d H:i'),
            ])
            ->recordActions([
                Action::make('approve')
                    ->label('通过')
                    ->color('success')
                    ->visible(fn (Comment $record) => $record->status !== 'published')
                    ->action(function (Comment $record) {
                        if ($record->status !== 'published') {
                            $record->post?->increment('comment_count');
                        }
                        $record->update(['status' => 'published']);
                    }),
                Action::make('reject')
                    ->label('拒绝')
                    ->color('danger')
                    ->visible(fn (Comment $record) => $record->status !== 'rejected')
                    ->action(fn (Comment $record) => $record->update(['status' => 'rejected'])),
            ])
            ->recordUrl(null)
            ->recordAction(null)
            ->defaultSort('created_at', 'desc');
    }
}
