<?php

namespace App\Filament\Tenant\Resources\ClientResource\Pages;

use App\Filament\Tenant\Resources\ClientResource;
use App\Services\CsvImportExport;
use Filament\Actions;
use Filament\Forms;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\ListRecords;

class ListClients extends ListRecords
{
    protected static string $resource = ClientResource::class;

    protected function getHeaderActions(): array
    {
        return [
            Actions\Action::make('export')
                ->label('Export CSV')
                ->icon('heroicon-m-arrow-down-tray')
                ->color('gray')
                ->action(fn () => app(CsvImportExport::class)->exportClients()),
            Actions\Action::make('import')
                ->label('Import CSV')
                ->icon('heroicon-m-arrow-up-tray')
                ->color('gray')
                ->modalHeading('Import clienți din CSV')
                ->modalDescription('CSV cu header: ' . implode(', ', CsvImportExport::CLIENT_COLUMNS) . '. Deduplicare după telefon.')
                ->schema([
                    Forms\Components\FileUpload::make('file')
                        ->required()
                        ->disk('local')
                        ->directory('imports')
                        ->acceptedFileTypes(['text/csv', 'text/plain', 'application/csv'])
                        ->maxSize(5120),
                ])
                ->action(function (array $data) {
                    $abs = \Illuminate\Support\Facades\Storage::disk('local')->path($data['file']);
                    $r = app(CsvImportExport::class)->importClients($abs);
                    @unlink($abs);
                    Notification::make()
                        ->title("Import: {$r['imported']} adăugați, {$r['skipped']} ignorați")
                        ->body(empty($r['errors']) ? null : implode("\n", array_slice($r['errors'], 0, 8)))
                        ->{empty($r['errors']) ? 'success' : 'warning'}()
                        ->send();
                }),
            Actions\CreateAction::make(),
        ];
    }
}
