<?php

namespace App\Filament\Resources\Tenants\Tables;

use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Actions\ForceDeleteBulkAction;
use Filament\Actions\RestoreBulkAction;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Filters\TrashedFilter;
use Filament\Tables\Table;

class TenantsTable
{
    public static function configure(Table $table): Table
    {
        return $table
            ->columns([
                TextColumn::make('name')
                    ->label(__('filament/admin/tenant_resource.name'))
                    ->searchable()
                    ->sortable()
                    ->weight('bold'),
                
                TextColumn::make('slug')
                    ->label(__('filament/admin/tenant_resource.slug'))
                    ->searchable()
                    ->copyable()
                    ->toggleable(isToggledHiddenByDefault: true),
                
                TextColumn::make('plan')
                    ->label(__('filament/admin/tenant_resource.plan'))
                    ->badge()
                    ->color(fn (string $state): string => match ($state) {
                        'trial' => 'warning',
                        'basic' => 'info',
                        'pro' => 'success',
                        'enterprise' => 'primary',
                        default => 'gray',
                    })
                    ->formatStateUsing(fn (string $state): string => match ($state) {
                        'trial' => 'تجريبي',
                        'basic' => 'أساسي',
                        'pro' => 'احترافي',
                        'enterprise' => 'مؤسسات',
                        default => $state,
                    })
                    ->sortable(),
                
                IconColumn::make('is_active')
                    ->label(__('filament/admin/tenant_resource.is_active'))
                    ->boolean()
                    ->sortable(),
                
                TextColumn::make('users_count')
                    ->label(__('filament/admin/tenant_resource.users_count'))
                    ->counts('users')
                    ->sortable(),
                
                TextColumn::make('trial_ends_at')
                    ->label(__('filament/admin/tenant_resource.trial_ends_at'))
                    ->date('Y-m-d')
                    ->sortable()
                    ->toggleable()
                    ->visible(fn ($record) => $record?->plan === 'trial'),
                
                TextColumn::make('storage_used')
                    ->label(__('filament/admin/tenant_resource.storage_used'))
                    ->formatStateUsing(function ($state, $record) {
                        if (!$record) return '-';
                        return $record->getHumanReadableStorageUsage();
                    })
                    ->sortable()
                    ->toggleable(),
                
                IconColumn::make('custom_branding_enabled')
                    ->label(__('filament/admin/tenant_resource.custom_branding_enabled'))
                    ->boolean()
                    ->toggleable(isToggledHiddenByDefault: true),
                
                TextColumn::make('domain')
                    ->label(__('filament/admin/tenant_resource.domain'))
                    ->url(fn ($state) => $state)
                    ->openUrlInNewTab()
                    ->placeholder('-')
                    ->toggleable(isToggledHiddenByDefault: true),
                
                TextColumn::make('created_at')
                    ->label(__('filament/admin/tenant_resource.created_at'))
                    ->dateTime('Y-m-d H:i')
                    ->sortable()
                    ->toggleable(isToggledHiddenByDefault: true),
                
                TextColumn::make('deleted_at')
                    ->label(__('filament/admin/tenant_resource.deleted_at'))
                    ->dateTime('Y-m-d H:i')
                    ->sortable()
                    ->toggleable(isToggledHiddenByDefault: true),
            ])
            ->filters([
                TrashedFilter::make()
                    ->label('المحذوفة'),
            ])
            ->recordActions([
                EditAction::make(),
            ])
            ->toolbarActions([
                BulkActionGroup::make([
                    DeleteBulkAction::make(),
                    ForceDeleteBulkAction::make(),
                    RestoreBulkAction::make(),
                ]),
            ])
            ->defaultSort('created_at', 'desc');
    }
}
