<?php

namespace App\Filament\Pages;

use App\Models\Plant;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;
use Filament\Pages\Dashboard\Concerns\HasFiltersForm;
use Filament\Pages\Page;
use Filament\Tables\Concerns\HasFilters;
use Illuminate\Support\Facades\Auth;

class ProductionOrderCount extends Page
{
    protected static ?string $navigationIcon = 'heroicon-o-document-text';

    protected static string $view = 'filament.pages.production-order-count';

    protected static ?string $navigationGroup = 'Production DashBoard';

    use HasFiltersForm;

    public function mount(): void
    {
        session()->forget(['selected_plant', 'selected_line', 'production_order']);
        $this->filtersForm->fill([
            'plant' => null,
            'line' => null,
            'production_order' => null,
        ]);
    }


    public function filtersForm(Form $form): Form
    {
        return $form
            ->statePath('filters') // Explicitly set where to store form data
            ->schema([
                Select::make('plant')
                    ->options(Plant::pluck('name', 'id'))
                    ->label('Select Plant')
                    ->reactive()
                    ->afterStateUpdated(function ($state) {
                        session(['selected_plant' => $state]);
                        $this->triggerChartUpdate();
                    }),
               // Line Filter
               Select::make('line')
               ->options(function ($get) {
                   $plantId = $get('plant');
                   return $plantId ? Plant::find($plantId)->getLineNames()->pluck('name', 'id') : [];
               })
               ->label('Select Line')
               ->reactive()
                ->afterStateUpdated(function ($state) {
                    session(['selected_line' => $state]); // Store in session
                    $this->triggerChartUpdate();
                }),

                  // Production Order Text Input
                TextInput::make('production_order')
                ->label('Production Order')
                ->reactive()
                ->afterStateUpdated(function ($state) {
                    session(['production_order' => $state]);
                    $this->triggerChartUpdate();
                }),
            ])
            ->columns(3);
    }

    // public function triggerChartUpdate(): void
    // {
    //     if (session()->has('selected_plant') && session()->has('selected_line') && session()->has('production_order')) {
    //         $this->dispatch('productionOrderChart');
    //     }
    // }

    public function triggerChartUpdate(): void
    {
        $filters = $this->filtersForm->getState();

        if (!empty($filters['plant']) && !empty($filters['line']) && !empty($filters['production_order'])) {
            $this->dispatch('productionOrderChart', filters: $filters);
        }
    }

    public static function canAccess(): bool
    {
        return Auth::check() && Auth::user()->can('view production order count dashboard');
    }
}
