<?php

namespace App\Filament\Resources\CreditAuditLog\Tables;

use App\Enums\CreditAuditEvent;
use App\Filament\Resources\CreditAuditLog\CreditAuditLogResource;
use App\Models\CreditAuditLog;
use Filament\Tables;
use Filament\Tables\Table;

class CreditAuditLogTable
{
    public static function configure(Table $table): Table
    {
        return $table
            ->columns([
                Tables\Columns\TextColumn::make('id')
                    ->label('#')
                    ->sortable(),

                Tables\Columns\TextColumn::make('credit.id')
                    ->label('Crédito')
                    ->sortable()
                    ->searchable(),

                Tables\Columns\TextColumn::make('user.name')
                    ->label('Usuario')
                    ->sortable()
                    ->searchable(),

                Tables\Columns\TextColumn::make('action')
                    ->label('Acción')
                    ->badge()
                    ->formatStateUsing(fn (string $state): string => CreditAuditEvent::tryFrom($state)?->label()
                        ?? ucfirst(str_replace('_', ' ', $state))
                    )
                    ->color(fn (string $state): string => CreditAuditEvent::tryFrom($state)?->color() ?? 'gray')
                    ->icon(fn (string $state): ?string => CreditAuditEvent::tryFrom($state)?->icon())
                    ->sortable(),

                Tables\Columns\TextColumn::make('created_at')
                    ->label('Fecha')
                    ->dateTime('d/m/Y H:i')
                    ->sortable(),
            ])
            ->filters([
                Tables\Filters\SelectFilter::make('action')
                    ->label('Acción')
                    ->options(
                        collect(CreditAuditEvent::cases())
                            ->mapWithKeys(fn (CreditAuditEvent $event) => [
                                $event->value => $event->label(),
                            ])
                            ->toArray()
                    ),
            ])
            ->defaultSort('created_at', 'desc')
            ->paginated([25, 50, 100])
            ->recordUrl(fn (CreditAuditLog $record): string => CreditAuditLogResource::getUrl('view', [
                'record' => $record,
            ]));
    }
}
