<?php

namespace App\Filament\Resources;

use App\Filament\Resources\LoginLogResource\Pages;
use App\Models\LoginLog;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;

class LoginLogResource extends Resource
{
    protected static ?string $model = LoginLog::class;

    protected static ?string $navigationIcon = 'heroicon-o-clock';
    protected static ?string $navigationGroup = 'مدیریت سیستم';
    protected static ?string $navigationLabel = 'گزارش ورود و خروج';
    protected static ?string $modelLabel = 'ورود/خروج';
    protected static ?string $pluralModelLabel = 'گزارش ورود و خروج';
    protected static ?int $navigationSort = 8;

    public static function canCreate(): bool
    {
        return false;
    }

    public static function table(Table $table): Table
    {
        return $table
            ->columns([
                Tables\Columns\TextColumn::make('user.name')->label('کاربر')->searchable(),
                Tables\Columns\TextColumn::make('user.job_title')->label('عنوان شغلی')->toggleable(),
                Tables\Columns\TextColumn::make('logged_in_at')->label('زمان ورود')->jalaliDateTime()->sortable(),
                Tables\Columns\TextColumn::make('logged_out_at')->label('زمان خروج')->jalaliDateTime(),
                Tables\Columns\TextColumn::make('duration')->label('مدت حضور')
                    ->state(function (LoginLog $r) {
                        if (! $r->logged_out_at) {
                            return 'آنلاین';
                        }
                        $mins = $r->logged_in_at->diffInMinutes($r->logged_out_at);

                        return \App\Support\NumberToWords::digits(intdiv($mins, 60)) . ' ساعت و ' . \App\Support\NumberToWords::digits($mins % 60) . ' دقیقه';
                    }),
                Tables\Columns\TextColumn::make('ip')->label('IP')->toggleable(isToggledHiddenByDefault: true),
            ])
            ->filters([
                Tables\Filters\SelectFilter::make('user_id')->label('کاربر')->relationship('user', 'name'),
            ])
            ->defaultSort('logged_in_at', 'desc');
    }

    public static function getPages(): array
    {
        return [
            'index' => Pages\ListLoginLogs::route('/'),
        ];
    }
}
