<?php

namespace App\Filament\Pages;

use App\Settings\SolutionSettings;
use Filament\Forms\Components\FileUpload;
use Filament\Forms\Components\Grid;
use Filament\Forms\Components\Repeater;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;
use Filament\Pages\SettingsPage;
use Illuminate\Contracts\Support\Htmlable;

class ManageSolutions extends SettingsPage
{
    protected static ?string $navigationGroup = 'Home';

    protected static ?string $navigationIcon = 'heroicon-o-wrench-screwdriver';

    protected static string $settings = SolutionSettings::class;

    public function form(Form $form): Form
    {
        return $form
            ->schema([
                Section::make('Solutions Section')
                    ->description('Manage the content for the solutions section on the homepage.')
                    ->icon('heroicon-o-puzzle-piece')
                    ->schema([
                        TextInput::make('solutions_subtitle')
                            ->label('Subtitle')
                            ->required()
                            ->maxLength(100),
                        TextInput::make('solutions_header')
                            ->label('Header')
                            ->required()
                            ->maxLength(255),
                        FileUpload::make('solutions_image')
                            ->label('Image 1060x453')
                            ->image()
                            ->directory('solutions')
                            ->required(),
                        Grid::make()->schema([
                            TextInput::make('solutions_button_text')
                                ->label('Button Text')
                                ->required()
                                ->maxLength(50),
                            TextInput::make('solutions_button_url')
                                ->label('Button URL')
                                ->required()
                                ->maxLength(255)
                                ->url(),
                        ])->columns(2),
                    ]),
                Section::make('Solution Items')
                    ->description('Manage individual solution items.')
                    ->icon('heroicon-o-cube')
                    ->schema([
                        Repeater::make('solution_items')
                            ->label('Solution Items')
                            ->schema([
                                Select::make('icon_class')
                                    ->label('Icon Class')
                                    ->searchable()
                                    ->helperText('e.g., flaticon-it-department. Refer to Flaticon for available icons.')
                                    ->required()
                                    ->options(self::getIconOptions()),
                                TextInput::make('title')
                                    ->label('Title')
                                    ->required()
                                    ->maxLength(100),
                                TextInput::make('link')
                                    ->label('Link')
                                    ->required()
                                    ->maxLength(255)
                                    ->url(),
                            ])
                            ->columns(3)
                            ->minItems(1)
                            ->maxItems(6)
                            ->defaultItems(3)
                            ->grid(2)
                            ->reorderable()
                            ->collapsible(),
                    ]),
            ])
            ->columns(1)
            ->statePath('data');
    }

    private static function getIconOptions(): array
    {
        return [
            'microsoft-word' => 'microsoft-word',
            'text-box' => 'text-box',
            'document-1' => 'document-1',
            'layers-1' => 'layers-1',
            'folder-1' => 'folder-1',
            'contract' => 'contract',
            'layer' => 'layer',
            'download-pdf' => 'download-pdf',
            'pdf' => 'pdf',
            'cloud-computing' => 'cloud-computing',
            'downloads' => 'downloads',
            'layers' => 'layers',
            'document' => 'document',
            'light-bulb-1' => 'light-bulb-1',
            'idea-2' => 'idea-2',
            'light-bulb' => 'light-bulb',
            'idea-1' => 'idea-1',
            'solution-2' => 'solution-2',
            'lightbulb' => 'lightbulb',
            'menus' => 'menus',
            'support-1' => 'support-1',
            'swipe-left' => 'swipe-left',
            'development' => 'development',
            'domain' => 'domain',
            'pets' => 'pets',
            'diagram' => 'diagram',
            'targeting' => 'targeting',
            'business-intelligence' => 'business-intelligence',
            'menu-6' => 'menu-6',
            'high-quality' => 'high-quality',
            'campaign' => 'campaign',
            'brain' => 'brain',
            'software-application' => 'software-application',
            'apps' => 'apps',
            'wrench-1' => 'wrench-1',
            'social-media-marketing-1' => 'social-media-marketing-1',
            'category-1' => 'category-1',
            'trophy-3' => 'trophy-3',
            'email-marketing' => 'email-marketing',
            'setting' => 'setting',
            'more' => 'more',
            'menu-5' => 'menu-5',
            'menu-4' => 'menu-4',
            'medical' => 'medical',
            'sparkle' => 'sparkle',
            'menu-3' => 'menu-3',
            'technology-2' => 'technology-2',
            'process' => 'process',
            'hearth-1' => 'hearth-1',
            'hearth' => 'hearth',
            'technology-1' => 'technology-1',
            'category' => 'category',
            'customer-care' => 'customer-care',
            'folder' => 'folder',
            'portfolio-1' => 'portfolio-1',
            'report' => 'report',
            'thinking' => 'thinking',
            'fingerprint' => 'fingerprint',
            'clock-2' => 'clock-2',
            'award' => 'award',
            'paper-plane' => 'paper-plane',
            'repair' => 'repair',
            'email-5' => 'email-5',
            'strategy' => 'strategy',
            'portfolio' => 'portfolio',
            'web-design' => 'web-design',
            'email-4' => 'email-4',
            'down-arrow-1' => 'down-arrow-1',
            'location-2' => 'location-2',
            'phone-call-2' => 'phone-call-2',
            'telephone-call' => 'telephone-call',
            'teamwork' => 'teamwork',
            'up-arrow-1' => 'up-arrow-1',
            'menu-2' => 'menu-2',
            'developing' => 'developing',
            'money-bag' => 'money-bag',
            'thumbs-up' => 'thumbs-up',
            'profits' => 'profits',
            'location-1' => 'location-1',
            'help-1' => 'help-1',
            'online-chat' => 'online-chat',
            'worker' => 'worker',
            'smart-home' => 'smart-home',
            'customer-service-1' => 'customer-service-1',
            'internet' => 'internet',
            'cash-flow' => 'cash-flow',
            'monitor' => 'monitor',
            'search-1' => 'search-1',
            'wrench' => 'wrench',
            'coin' => 'coin',
            'cash' => 'cash',
            'analyst' => 'analyst',
            'dashboard-1' => 'dashboard-1',
            'digital' => 'digital',
            'searching' => 'searching',
            'email-3' => 'email-3',
            'star-1' => 'star-1',
            'touch' => 'touch',
            'medal' => 'medal',
            'world-wide-web-1' => 'world-wide-web-1',
            'phone' => 'phone',
            'social-media' => 'social-media',
            '24-7' => '24-7',
            'hard-work' => 'hard-work',
            'star' => 'star',
            'plus' => 'plus',
            'minus-2' => 'minus-2',
            'menu-1' => 'menu-1',
            'cloud' => 'cloud',
            'handshake' => 'handshake',
            'people' => 'people',
            'ai' => 'ai',
            'save-money' => 'save-money',
            'shopping-online' => 'shopping-online',
            'profit-1' => 'profit-1',
            'blockchain' => 'blockchain',
            'sales' => 'sales',
            'back-in-time' => 'back-in-time',
            'clock-1' => 'clock-1',
            'user-3' => 'user-3',
            'user-2' => 'user-2',
            'pawprint' => 'pawprint',
            'payment-method' => 'payment-method',
            'world-wide-web' => 'world-wide-web',
            'minus-1' => 'minus-1',
            'add-1' => 'add-1',
            'management' => 'management',
            'help' => 'help',
            'chip' => 'chip',
            'artificial-intelligence' => 'artificial-intelligence',
            'group' => 'group',
            'money-1' => 'money-1',
            'conversation' => 'conversation',
            'email-2' => 'email-2',
            'rating' => 'rating',
            'placeholder' => 'placeholder',
            'trophy-2' => 'trophy-2',
            'cpu' => 'cpu',
            'home' => 'home',
            'right-arrow-1' => 'right-arrow-1',
            'like' => 'like',
            'mail' => 'mail',
            'briefcase' => 'briefcase',
            'money' => 'money',
            'up-arrow' => 'up-arrow',
            'trophy-1' => 'trophy-1',
            'user-1' => 'user-1',
            'question' => 'question',
            'team-1' => 'team-1',
            'user' => 'user',
            'email-1' => 'email-1',
            'price-tag-1' => 'price-tag-1',
            'tag' => 'tag',
            'loupe' => 'loupe',
            'right-arrow' => 'right-arrow',
            'left-arrow-1' => 'left-arrow-1',
            'down-arrow' => 'down-arrow',
            'price-tag' => 'price-tag',
            'stars' => 'stars',
            'search' => 'search',
            'phone-call-1' => 'phone-call-1',
            'award-symbol' => 'award-symbol',
            'christmas-stars' => 'christmas-stars',
            'minus' => 'minus',
            'add' => 'add',
            'cancel-1' => 'cancel-1',
            'checked' => 'checked',
            'cyber-security' => 'cyber-security',
            'data-protection' => 'data-protection',
            'hosting' => 'hosting',
            'brand-awareness' => 'brand-awareness',
            'ux-design' => 'ux-design',
            'influencer' => 'influencer',
            'online-advertising' => 'online-advertising',
            'web-management' => 'web-management',
            'seo-1' => 'seo-1',
            'computer' => 'computer',
            'software-development' => 'software-development',
            'coding-1' => 'coding-1',
            'coding' => 'coding',
            'app-development' => 'app-development',
            'content-marketing' => 'content-marketing',
            'social-media-marketing' => 'social-media-marketing',
            'analysis-1' => 'analysis-1',
            'twitter' => 'twitter',
            'repairing' => 'repairing',
            'data-visualization' => 'data-visualization',
            'information-technology' => 'information-technology',
            'statistics-1' => 'statistics-1',
            'exploration' => 'exploration',
            'project-1' => 'project-1',
            'cross-mark' => 'cross-mark',
            'search-analysis' => 'search-analysis',
            'system' => 'system',
            'hashtag-1' => 'hashtag-1',
            'hashtag' => 'hashtag',
            'it-department' => 'it-department',
            'creative' => 'creative',
            'online-analytical' => 'online-analytical',
            'secure-data' => 'secure-data',
            'slash' => 'slash',
            'creative-thinking' => 'creative-thinking',
            'right-up' => 'right-up',
            'dashboard' => 'dashboard',
            'profit' => 'profit',
            'project' => 'project',
            'phone-call' => 'phone-call',
            'seo' => 'seo',
            'prototype' => 'prototype',
            'creative-process' => 'creative-process',
            'growth' => 'growth',
            'technical-support' => 'technical-support',
            'technology' => 'technology',
            'solution-1' => 'solution-1',
            'creative-tools' => 'creative-tools',
            'data-science' => 'data-science',
            'costumer' => 'costumer',
            'cooperation' => 'cooperation',
            'next' => 'next',
            'back' => 'back',
            'brand' => 'brand',
            'right-arrows' => 'right-arrows',
            'idea' => 'idea',
            'design-thinking' => 'design-thinking',
            'check' => 'check',
            'cross' => 'cross',
            'right' => 'right',
            'link' => 'link',
            'server' => 'server',
            'analysis' => 'analysis',
            'support' => 'support',
            'project-management' => 'project-management',
            'networking' => 'networking',
            'team' => 'team',
            'check-mark' => 'check-mark',
            'consultation' => 'consultation',
            'solution' => 'solution',
            'success' => 'success',
            'customer-review' => 'customer-review',
            'select' => 'select',
            'statistics' => 'statistics',
            'machine-learning' => 'machine-learning',
            'vector' => 'vector',
            'trophy' => 'trophy',
            'data' => 'data',
            'clock' => 'clock',
            'cancel' => 'cancel',
            'customer-service' => 'customer-service',
            'digital-marketing' => 'digital-marketing',
            'email' => 'email',
            'stats' => 'stats',
            'menu' => 'menu',
            'location' => 'location',
            'tick' => 'tick',
            'left-arrow' => 'left-arrow',
            'dots-menu' => 'dots-menu',
        ];
    }

    public static function getNavigationGroup(): ?string
    {
        return __('Home');
    }

    public static function getNavigationLabel(): string
    {
        return __('Manage Solutions');
    }

    public function getTitle(): string|Htmlable
    {
        return 'Solutions';
    }

    public function getHeading(): string|Htmlable
    {
        return 'Edit solutions text, icons, and links from here';
    }

    public function getSubheading(): string|Htmlable|null
    {
        return 'Manage the solutions section content, including individual solution items.';
    }
}
