<?php

namespace App\Filament\Resources\Users\Tables;

use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Actions\DeleteAction;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Filters\SelectFilter;
use Filament\Tables\Table;

class UsersTable
{
    public static function configure(Table $table): Table
    {
        return $table
            ->modifyQueryUsing(function ($query) {
                $user = auth()->user();

                // System Admin يرى كل المستخدمين
                if ($user?->is_system_admin) {
                    return $query;
                }

                // Tenant Owner و باقي المستخدمين يروا فقط مستخدمي مؤسستهم
                if ($user?->tenant_id) {
                    return $query->where('tenant_id', $user->tenant_id);
                }

                // مستخدم بدون tenant_id لا يرى أي مستخدمين
                return $query->whereRaw('1 = 0');
            })
            ->columns([
                TextColumn::make('name')
                    ->label(__('filament/admin/user_resource.name'))
                    ->searchable()
                    ->sortable(),
                TextColumn::make('tenant.name')
                    ->label(__('filament/admin/user_resource.tenant.name'))
                    ->searchable()
                    ->sortable()
                    ->toggleable(isToggledHiddenByDefault: false)
                    ->visible(fn() => auth()->user()?->is_system_admin ?? false),
                // TextColumn::make('translations.name')
                //     ->label(__('filament/admin/user_resource.translations.name'))
                //     ->limitList(1)
                //     ->toggleable(isToggledHiddenByDefault: false)
                //     ->searchable(query: function ($query, string $search) {
                //         return $query->whereHas('translations', function ($q) use ($search) {
                //             $q->where('name', 'like', '%' . $search . '%');
                //         });
                //     }),
                TextColumn::make('email')
                    ->label(__('filament/admin/user_resource.email'))
                    ->searchable()
                    ->sortable()
                    ->toggleable(),
                IconColumn::make('is_system_admin')
                    ->label(__('filament/admin/user_resource.is_system_admin'))
                    ->boolean()
                    ->trueIcon('heroicon-o-shield-check')
                    ->falseIcon('heroicon-o-x-circle')
                    ->trueColor('danger')
                    ->falseColor('gray')
                    ->sortable()
                    ->toggleable(isToggledHiddenByDefault: false),
                IconColumn::make('is_tenant_owner')
                    ->label(__('filament/admin/user_resource.is_tenant_owner'))
                    ->boolean()
                    ->trueIcon('heroicon-o-star')
                    ->falseIcon('heroicon-o-x-circle')
                    ->trueColor('success')
                    ->falseColor('gray')
                    ->sortable()
                    ->toggleable(isToggledHiddenByDefault: false),
                TextColumn::make('roles.name')
                    ->label(__('filament/admin/user_resource.roles.name'))
                    ->limitList(2)
                    ->badge()
                    ->toggleable(isToggledHiddenByDefault: false)
                    ->toggleable(),
                TextColumn::make('created_at')
                    ->label(__('filament/admin/user_resource.created_at'))
                    ->dateTime()
                    ->sortable()
                    ->toggleable(isToggledHiddenByDefault: true),
                TextColumn::make('updated_at')
                    ->label(__('filament/admin/user_resource.updated_at'))
                    ->dateTime()
                    ->sortable()
                    ->toggleable(isToggledHiddenByDefault: true),
            ])
            ->filters([
                SelectFilter::make('tenant_id')
                    ->label('المؤسسة')
                    ->relationship('tenant', 'name')
                    ->searchable()
                    ->preload()
                    ->visible(fn() => auth()->user()?->is_system_admin ?? false),
            ])
            ->recordActions([
                EditAction::make(),
                DeleteAction::make()
                    ->requiresConfirmation()
                    ->visible(function ($record) {
                        // إخفاء زر الحذف لـ System Admin
                        if ($record->is_system_admin) {
                            return false;
                        }

                        // إخفاء زر الحذف لآخر tenant_owner في المؤسسة
                        if ($record->is_tenant_owner && $record->tenant_id) {
                            $tenantOwnersCount = \App\Models\User::where('tenant_id', $record->tenant_id)
                                ->where('is_tenant_owner', true)
                                ->count();

                            if ($tenantOwnersCount <= 1) {
                                return false;
                            }
                        }

                        return true;
                    }),
            ])
            ->toolbarActions([
                BulkActionGroup::make([
                    DeleteBulkAction::make(),
                ]),
            ]);
    }
}
