<?php

namespace App\Filament\Tenant\Resources;

use App\Filament\Tenant\Resources\PricingCoefficientResource\Pages;
use App\Models\Tenant\PricingCoefficient;
use Filament\Actions;
use Filament\Forms;
use Filament\Resources\Resource;
use Filament\Schemas;
use Filament\Schemas\Schema;
use Filament\Tables;
use Filament\Tables\Table;

class PricingCoefficientResource extends Resource
{
    protected static ?string $model = PricingCoefficient::class;

    protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-adjustments-horizontal';

    public static function getNavigationLabel(): string
    {
        return __('nav.label.Coeficienți preț');
    }

    public static function getNavigationGroup(): ?string
    {
        return __('nav.group.Depozit');
    }

    protected static ?int $navigationSort = 46;

    public static function form(Schema $schema): Schema
    {
        return $schema->components([
            Schemas\Components\Section::make(__('Coeficient'))
                ->columns(2)
                ->schema([
                    Forms\Components\TextInput::make('name')->label(__('Denumire'))->required()
                        ->placeholder(__('ex: Mașină veche, Client VIP, Express'))->columnSpanFull(),
                    Forms\Components\TextInput::make('multiplier')
                        ->label(__('Multiplicator'))
                        ->numeric()
                        ->required()
                        ->default(1.10)
                        ->helperText(__('1.15 = +15% peste prețul de bază. 0.95 = -5%.')),
                    Forms\Components\TextInput::make('priority')->label(__('Prioritate'))->numeric()->default(100),
                    Forms\Components\Toggle::make('stackable')
                        ->label(__('Cumulabil'))
                        ->default(true)
                        ->helperText(__('Cumulabil = se înmulțește cu alți coeficienți. Necumulabil = doar cel mai mare necumulabil se aplică.')),
                    Forms\Components\Toggle::make('is_active')->label(__('Activ'))->default(true),
                ]),
            Schemas\Components\Section::make(__('Condiții (toate trebuie îndeplinite)'))
                ->description(__('Lasă gol = se aplică mereu. Combină condițiile pentru a ținti situații specifice.'))
                ->columns(2)
                ->schema([
                    Forms\Components\CheckboxList::make('conditions.classes')
                        ->label(__('Clase auto'))
                        ->options(\App\Support\I18n::opts(PricingCoefficient::VEHICLE_CLASSES))
                        ->columns(2)
                        ->columnSpanFull(),
                    Forms\Components\CheckboxList::make('conditions.body_types')
                        ->label(__('Caroserie'))
                        ->options(\App\Support\I18n::opts(\App\Models\Tenant\Vehicle::BODY_TYPES))
                        ->columns(3)
                        ->columnSpanFull(),
                    Forms\Components\CheckboxList::make('conditions.transmissions')
                        ->label(__('Cutie de viteze'))
                        ->options(\App\Support\I18n::opts(\App\Models\Tenant\Vehicle::TRANSMISSION_TYPES))
                        ->columns(3)
                        ->columnSpanFull(),
                    Forms\Components\TextInput::make('conditions.age_min')->label(__('Vârstă min (ani)'))->numeric(),
                    Forms\Components\TextInput::make('conditions.age_max')->label(__('Vârstă max (ani)'))->numeric(),
                    Forms\Components\Toggle::make('conditions.client_vip')->label(__('Doar clienți VIP')),
                    Forms\Components\CheckboxList::make('conditions.urgency')
                        ->label(__('Urgență'))
                        ->options(\App\Support\I18n::opts(PricingCoefficient::URGENCY))
                        ->columns(3)
                        ->columnSpanFull(),
                ]),
        ]);
    }

    public static function table(Table $table): Table
    {
        return $table
            ->columns([
                Tables\Columns\TextColumn::make('priority')->label(__('Prio'))->sortable()->alignRight(),
                Tables\Columns\TextColumn::make('name')->searchable()->sortable(),
                Tables\Columns\TextColumn::make('multiplier')
                    ->label(__('Multiplicator'))
                    ->formatStateUsing(fn ($s) => '×' . rtrim(rtrim(number_format((float) $s, 3), '0'), '.'))
                    ->alignRight()
                    ->color(fn ($s) => (float) $s >= 1 ? 'success' : 'warning'),
                Tables\Columns\IconColumn::make('stackable')->label(__('Cumul.'))->boolean(),
                Tables\Columns\IconColumn::make('is_active')->label(__('Activ'))->boolean(),
            ])
            ->filters([
                Tables\Filters\TernaryFilter::make('is_active')->label(__('Active')),
            ])
            ->actions([
                Actions\EditAction::make(),
                Actions\DeleteAction::make(),
            ])
            ->emptyStateHeading(__('Niciun coeficient'))
            ->emptyStateDescription(__('Adaugă reguli care ajustează prețul în funcție de vârsta mașinii, clasă (SUV, comercial, hibrid), client VIP sau urgență. Se aplică peste markup-ul de bază pe fișele de lucru.'))
            ->emptyStateIcon('heroicon-o-adjustments-horizontal')
            ->defaultSort('priority');
    }

    public static function getModelLabel(): string
    {
        return __('coeficient');
    }

    public static function getPluralModelLabel(): string
    {
        return __('coeficienți preț');
    }

    public static function getPages(): array
    {
        return [
            'index' => Pages\ListPricingCoefficients::route('/'),
            'create' => Pages\CreatePricingCoefficient::route('/create'),
            'edit' => Pages\EditPricingCoefficient::route('/{record}/edit'),
        ];
    }
}
