'Kanban WO', 'reports' => 'Rapoarte avansate', 'ai' => 'Asistent AI', 'pdf' => 'Generare PDF', 'reverb' => 'WebSocket real-time', 'api' => 'REST API + tokens', 'multi_user' => 'Multi-user (>1 cont)', 'white_label' => 'White-label complet', 'priority_support' => 'Suport prioritar', 'custom_domain' => 'Domeniu propriu', ]; public static function form(Schema $schema): Schema { return $schema->components([ Schemas\Components\Section::make('Identificare') ->columns(2) ->schema([ Forms\Components\TextInput::make('slug') ->required()->alphaDash()->unique(ignoreRecord: true) ->dehydrateStateUsing(fn ($s) => strtolower((string) $s)) ->extraInputAttributes(['style' => 'text-transform:lowercase']), Forms\Components\TextInput::make('name')->required()->maxLength(60), Forms\Components\Toggle::make('is_active')->label('Activ')->default(true), Forms\Components\Toggle::make('is_public')->label('Public (afișat la signup)')->default(true), ]), Schemas\Components\Section::make('Preț') ->columns(3) ->schema([ Forms\Components\TextInput::make('price_monthly')->label('Preț lunar')->numeric()->required()->suffix(fn (Get $get) => $get('currency') ?? 'MDL'), Forms\Components\TextInput::make('price_yearly')->label('Preț anual')->numeric()->helperText('De obicei 10× preț lunar (2 luni gratis).')->suffix(fn (Get $get) => $get('currency') ?? 'MDL'), Forms\Components\Select::make('currency')->options(['MDL' => 'MDL', 'EUR' => 'EUR', 'USD' => 'USD'])->default('MDL'), ]), Schemas\Components\Section::make('Funcționalități incluse') ->columns(2) ->schema([ Forms\Components\CheckboxList::make('features') ->options(self::FEATURE_OPTIONS) ->columns(2) ->columnSpanFull(), ]), Schemas\Components\Section::make('Limite') ->columns(3) ->schema([ Forms\Components\TextInput::make('limits.max_users')->label('Max useri')->numeric()->placeholder('∞'), Forms\Components\TextInput::make('limits.max_clients')->label('Max clienți')->numeric()->placeholder('∞'), Forms\Components\TextInput::make('limits.max_vehicles')->label('Max mașini')->numeric()->placeholder('∞'), Forms\Components\TextInput::make('limits.max_work_orders_month')->label('Max fișe/lună')->numeric()->placeholder('∞'), Forms\Components\TextInput::make('limits.storage_mb')->label('Storage (MB)')->numeric()->placeholder('∞'), Forms\Components\TextInput::make('limits.ai_messages_month')->label('Mesaje AI/lună')->numeric()->placeholder('∞'), ]), ]); } public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('name')->searchable()->sortable(), Tables\Columns\TextColumn::make('price_monthly') ->money(fn ($record) => $record->currency) ->label('Lunar') ->sortable(), Tables\Columns\TextColumn::make('price_yearly') ->money(fn ($record) => $record->currency) ->label('Anual'), Tables\Columns\TextColumn::make('companies_count') ->counts('companies') ->label('Abonați') ->badge() ->color('primary'), Tables\Columns\TextColumn::make('features') ->label('Funcționalități') ->formatStateUsing(fn ($s) => is_array($s) ? count($s) . ' incluse' : '—') ->badge(), Tables\Columns\IconColumn::make('is_active')->boolean()->label('Activ'), Tables\Columns\IconColumn::make('is_public')->boolean()->label('Public'), ]) ->actions([ Actions\EditAction::make(), Actions\DeleteAction::make(), ]) ->emptyStateHeading('Niciun plan definit') ->emptyStateDescription('Creează planuri (ex: Free, Basic, Pro) și atribuie-le companiilor.') ->defaultSort('price_monthly'); } public static function getPages(): array { return [ 'index' => Pages\ListPlans::route('/'), 'create' => Pages\CreatePlan::route('/create'), 'edit' => Pages\EditPlan::route('/{record}/edit'), ]; } }