<?php

namespace App\Filament\Pages;

use App\Filament\Pages\Concerns\HasSaveHeaderAction;
use App\Models\Reglage;
use Filament\Forms\Components\FileUpload;
use Filament\Forms\Components\Tabs;
use Filament\Forms\Components\Tabs\Tab;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Contracts\HasForms;
use Filament\Forms\Form;
use Filament\Notifications\Notification;
use Filament\Pages\Page;

/** @property Form $form */
class ReglageHero extends Page implements HasForms
{
    use HasSaveHeaderAction;
    use InteractsWithForms;

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

    protected static ?string $navigationGroup = 'Réglages du site';

    protected static ?string $navigationLabel = 'Accueil et titres par section';

    protected static ?string $title = 'Accueil et titres par section';

    protected static string $view = 'filament.pages.simple-form-page';

    public ?array $data = [];

    public function mount(): void
    {
        $this->form->fill(Reglage::singleton()->toArray());
    }

    public function form(Form $form): Form
    {
        return $form->schema([
            Tabs::make('Hero')->tabs([
                Tab::make('Français')->schema([
                    TextInput::make('set_hero_eyebrow_fr')->label('Sur-titre'),
                    Textarea::make('set_hero_title_fr')->label('Titre principal (H1)')->rows(2)
                        ->helperText("Entourez une partie du texte de doubles crochets [[ ... ]] pour l'afficher en dégradé doré (ex : « Perspectives sur [[l'Océan Indien]] »)."),
                    Textarea::make('set_hero_soustitre_fr')->label('Sous-titre')->rows(3),
                    TextInput::make('set_hero_cta1_fr')->label('Bouton principal'),
                    TextInput::make('set_hero_cta2_fr')->label('Bouton secondaire'),
                    TextInput::make('set_hero_trust_fr')->label('Ligne de confiance'),
                ]),
                Tab::make('English')->schema([
                    TextInput::make('set_hero_eyebrow_en')->label('Eyebrow'),
                    Textarea::make('set_hero_title_en')->label('Main title (H1)')->rows(2)
                        ->helperText('Wrap part of the text in double square brackets [[ ... ]] to display it in the gold gradient style (e.g. "Perspectives on [[the Indian Ocean]]").'),
                    Textarea::make('set_hero_soustitre_en')->label('Subtitle')->rows(3),
                    TextInput::make('set_hero_cta1_en')->label('Primary button'),
                    TextInput::make('set_hero_cta2_en')->label('Secondary button'),
                    TextInput::make('set_hero_trust_en')->label('Trust line'),
                ]),
            ])->columnSpanFull(),

            FileUpload::make('set_hero_image')->label('Image de fond du hero')->image()->directory('assets')->visibility('public'),

            Tabs::make('Zone')->tabs([
                Tab::make('Français')->schema([
                    TextInput::make('set_zone_eyebrow_fr')->label('Sur-titre'),
                    TextInput::make('set_zone_title_fr')->label('Titre')
                        ->helperText("Entourez une partie du texte de doubles crochets [[ ... ]] pour l'afficher en dégradé doré."),
                    Textarea::make('set_zone_intro_fr')->label('Introduction')->rows(2),
                ]),
                Tab::make('English')->schema([
                    TextInput::make('set_zone_eyebrow_en')->label('Eyebrow'),
                    TextInput::make('set_zone_title_en')->label('Title')
                        ->helperText('Wrap part of the text in double square brackets [[ ... ]] to display it in the gold gradient style.'),
                    Textarea::make('set_zone_intro_en')->label('Introduction')->rows(2),
                ]),
            ])->columnSpanFull(),

            Tabs::make('Services')->tabs([
                Tab::make('Français')->schema([
                    TextInput::make('set_svc_eyebrow_fr')->label('Sur-titre'),
                    TextInput::make('set_svc_title_fr')->label('Titre')
                        ->helperText("Entourez une partie du texte de doubles crochets [[ ... ]] pour l'afficher en dégradé doré."),
                    Textarea::make('set_svc_intro_fr')->label('Introduction')->rows(2),
                ]),
                Tab::make('English')->schema([
                    TextInput::make('set_svc_eyebrow_en')->label('Eyebrow'),
                    TextInput::make('set_svc_title_en')->label('Title')
                        ->helperText('Wrap part of the text in double square brackets [[ ... ]] to display it in the gold gradient style.'),
                    Textarea::make('set_svc_intro_en')->label('Introduction')->rows(2),
                ]),
            ])->columnSpanFull(),

            Tabs::make('Programme')->tabs([
                Tab::make('Français')->schema([
                    TextInput::make('set_prog_eyebrow_fr')->label('Sur-titre'),
                    TextInput::make('set_prog_title_fr')->label('Titre'),
                    Textarea::make('set_prog_intro_fr')->label('Introduction')->rows(2),
                ]),
                Tab::make('English')->schema([
                    TextInput::make('set_prog_eyebrow_en')->label('Eyebrow'),
                    TextInput::make('set_prog_title_en')->label('Title'),
                    Textarea::make('set_prog_intro_en')->label('Introduction')->rows(2),
                ]),
            ])->columnSpanFull(),

            TextInput::make('set_email')->label('Email de contact')->email(),
            TextInput::make('set_whatsapp')->label('Numéro WhatsApp affiché'),
            TextInput::make('set_whatsapp_url')->label('Lien WhatsApp (wa.me/...)')->url(),
            TextInput::make('set_site_url')->label('URL du site')->url(),
        ])->statePath('data');
    }

    public function save(): void
    {
        $data = $this->form->getState();
        Reglage::singleton()->fill($data)->save();

        Notification::make()->title('Réglages enregistrés')->success()->send();
    }
}
