<?php

namespace {{ namespace }};

use Cheesegrits\FilamentGoogleMaps\Filters\RadiusFilter;
use Cheesegrits\FilamentGoogleMaps\Widgets\MapTableWidget;
use Cheesegrits\FilamentGoogleMaps\Columns\MapColumn;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;

class {{ class }} extends MapTableWidget
{
	protected static ?string $heading = '{{ og-model }} Map';

	protected static ?int $sort = 1;

	protected static ?string $pollingInterval = null;

	protected static ?bool $clustering = true;

	protected static ?string $mapId = 'incidents';

	protected function getTableQuery(): Builder
	{
		return {{ model }}::query()->latest();
	}

	protected function getTableColumns(): array
	{
		return [
			Tables\Columns\TextColumn::make('{{ lat }}'),
			Tables\Columns\TextColumn::make('{{ lng }}'),
			MapColumn::make('location')
				->extraImgAttributes(
					fn ($record): array => ['title' => $record->{{ lat }} . ',' . $record->{{ lng }}]
				)
				->height('150')
				->width('250')
				->type('hybrid')
				->zoom(15),
		];
	}

	protected function getTableFilters(): array
	{
		return [
			RadiusFilter::make('{{ location }}')
				->section('Radius Filter')
				->selectUnit(),
            MapIsFilter::make('map'),
		];
	}

	protected function getTableActions(): array
	{
		return [
			Tables\Actions\ViewAction::make(),
			Tables\Actions\EditAction::make(),
			GoToAction::make()
				->zoom(14),
			RadiusAction::make(),
		];
	}

	protected function getData(): array
	{
		$locations = $this->getRecords();

		$data = [];

		foreach ($locations as $location)
		{
			$data[] = [
				'location' => [
					'lat' => $location->{{ lat }} ? round(floatval($location->{{ lat }}), static::$precision) : 0,
                    'lng' => $location->{{ lng }} ? round(floatval($location->{{ lng }}), static::$precision) : 0,
				],
                'id'      => $location->{{ pk }},
			];
		}

		return $data;
	}
}
