query(Currency::query())
            ->modelLabel($this->getTableModelLabel())
            ->columns([
                Tables\Columns\TextColumn::make('code')
                    ->localizeLabel()
                    ->weight(FontWeight::Medium)
                    ->icon(static fn (Currency $record) => $record->isEnabled() ? 'heroicon-o-lock-closed' : null)
                    ->tooltip(function (Currency $record) {
                        $tooltipMessage = translate('Default :Record', [
                            'Record' => $this->getTableModelLabel(),
                        ]);
                        return $record->isEnabled() ? $tooltipMessage : null;
                    })
                    ->iconPosition(IconPosition::After)
                    ->sortable()
                    ->searchable(),
                Tables\Columns\TextColumn::make('name')
                    ->localizeLabel()
                    ->sortable()
                    ->searchable(),
                Tables\Columns\TextColumn::make('rate')
                    ->localizeLabel()
                    ->sortable()
                    ->searchable(),
                Tables\Columns\TextColumn::make('live_rate')
                    ->localizeLabel()
                    ->sortable()
                    ->searchable(),
            ])
            ->filters([
                //
            ])
            ->actions([
                Tables\Actions\Action::make('update_rate')
                    ->label('Update Rate')
                    ->icon('heroicon-o-arrow-path')
                    ->hidden(static fn (Currency $record): bool => $record->isEnabled() || ($record->rate === $record->live_rate))
                    ->requiresConfirmation()
                    ->action(static function (Currency $record): void {
                        if (($record->rate !== $record->live_rate) && $record->isDisabled()) {
                            $record->update([
                                'rate' => $record->live_rate,
                            ]);
                            Notification::make()
                                ->success()
                                ->title('Exchange Rate Updated')
                                ->body(__('The exchange rate for :currency has been updated to reflect the current market rate.', [
                                    'currency' => $record->name,
                                ]))
                                ->send();
                        }
                    }),
            ])
            ->bulkActions([
                Tables\Actions\BulkAction::make('update_rate')
                    ->label('Update Rate')
                    ->icon('heroicon-o-arrow-path')
                    ->requiresConfirmation()
                    ->deselectRecordsAfterCompletion()
                    ->action(function (Collection $records): void {
                        $updatedCurrencies = [];
                        $records->each(function (Currency $record) use (&$updatedCurrencies): void {
                            if (($record->rate !== $record->live_rate) && $record->isDisabled()) {
                                $record->update([
                                    'rate' => $record->live_rate,
                                ]);
                                $updatedCurrencies[] = $record->name;
                            }
                        });
                        if (filled($updatedCurrencies)) {
                            $currencyList = implode('
', array_map(static function ($currency) {
                                return '• ' . $currency;
                            }, $updatedCurrencies));
                            $message = __('The exchange rate for the following currencies has been updated to reflect the current market rate:') . '
';
                            $message .= $currencyList;
                            Notification::make()
                                ->success()
                                ->title('Exchange Rates Updated')
                                ->body($message)
                                ->send();
                        }
                    }),
            ])
            ->checkIfRecordIsSelectableUsing(static function (Currency $record): bool {
                return ($record->rate !== $record->live_rate) && $record->isDisabled();
            });
    }
    public function render(): View
    {
        return view('livewire.company.service.live-currency.list-company-currencies');
    }
}