<?php

namespace App\Filament\Membre\Resources\Annonces\Schemas;

use App\Enums\TypeAnnonce;
use Filament\Forms\Components\DateTimePicker;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Textarea;
use Filament\Schemas\Schema;

use App\Enums\StatutAnnonce;
use Filament\Forms\Components\DatePicker;
use Filament\Forms\Components\FileUpload;
use Filament\Forms\Components\Repeater;
use Filament\Forms\Components\Toggle;
use Filament\Schemas\Components\Fieldset;
use Filament\Schemas\Components\Utilities\Get;

class AnnonceForm
{
    public static function configure(Schema $schema): Schema
    {
        return $schema
            ->components([
                
Select::make('type')
    ->label('Type d\'annonce')
    ->options(TypeAnnonce::class)
    ->native(false)
    ->required()
    ->live(), // <-- rend le formulaire réactif au changement de type

TextInput::make('titre')
    ->required()
    ->maxLength(255),

Textarea::make('description')
    ->required()
    ->rows(5)
    ->columnSpanFull(),

TextInput::make('localisation')
    ->maxLength(255),

TextInput::make('contact_nom')
    ->label('Nom de contact')
    ->maxLength(255),

TextInput::make('contact_telephone')
    ->label('Téléphone de contact')
    ->tel()
    ->maxLength(255),

TextInput::make('contact_email')
    ->label('Email de contact')
    ->email()
    ->maxLength(255),

// ---------- IMAGES (jusqu'à 10, table annonce_images) ----------
Repeater::make('images')
    ->label('Images (jusqu\'à 10)')
    ->relationship()
    ->schema([
        FileUpload::make('chemin')
            ->label('Image')
            ->image()
            ->disk('public')
            ->directory('annonces')
            ->required(),
    ])
    ->maxItems(10)
    ->columnSpanFull(),

// ---------- DÉTAILS PAR TYPE (une seule section visible) ----------
Fieldset::make('Détails — Marketplace')
    ->relationship('marketplaceDetail')
    ->visible(function (Get $get): bool {
    $type = $get('type');
    $type = $type instanceof TypeAnnonce ? $type->value : $type;
    return $type === TypeAnnonce::Marketplace->value;
})
    ->columns(2)
    ->columnSpanFull()
    ->schema([
        TextInput::make('prix')->label('Prix (HTG)')->numeric(),
        Select::make('etat')->label('État')
            ->options(['neuf' => 'Neuf', 'occasion' => 'Occasion'])
            ->native(false),
        TextInput::make('categorie_produit')->label('Catégorie'),
        Toggle::make('negociable')->label('Négociable'),
    ]),

Fieldset::make('Détails — Événement')
    ->relationship('evenementDetail')
    ->visible(function (Get $get): bool {
    $type = $get('type');
    $type = $type instanceof TypeAnnonce ? $type->value : $type;
    return $type === TypeAnnonce::Evenement->value;
})
    ->columns(2)
    ->columnSpanFull()
    ->schema([
        DateTimePicker::make('date_debut')->label('Début')->required(),
        DateTimePicker::make('date_fin')->label('Fin'),
        TextInput::make('lieu')->label('Lieu'),
        Toggle::make('gratuit')->label('Gratuit')->default(true),
        TextInput::make('prix_entree')->label('Prix d\'entrée (HTG)')->numeric(),
        TextInput::make('organisateur')->label('Organisateur'),
    ]),

Fieldset::make('Détails — Offre d\'emploi')
    ->relationship('emploiDetail')
    ->visible(function (Get $get): bool {
    $type = $get('type');
    $type = $type instanceof TypeAnnonce ? $type->value : $type;
    return $type === TypeAnnonce::Emploi->value;
})
    ->columns(2)
    ->columnSpanFull()
    ->schema([
        TextInput::make('poste')->label('Poste')->required(),
        TextInput::make('entreprise')->label('Entreprise'),
        Select::make('type_contrat')->label('Type de contrat')
            ->options(['cdi' => 'CDI', 'cdd' => 'CDD', 'stage' => 'Stage', 'freelance' => 'Freelance'])
            ->native(false),
        DatePicker::make('date_limite')->label('Date limite'),
        TextInput::make('salaire_min')->label('Salaire min (HTG)')->numeric(),
        TextInput::make('salaire_max')->label('Salaire max (HTG)')->numeric(),
        Textarea::make('comment_postuler')->label('Comment postuler')->columnSpanFull(),
    ]),

Fieldset::make('Détails — Annuaire')
    ->relationship('annuaireDetail')
   ->visible(function (Get $get): bool {
    $type = $get('type');
    $type = $type instanceof TypeAnnonce ? $type->value : $type;
    return $type === TypeAnnonce::Annuaire->value;
})
    ->columns(2)
    ->columnSpanFull()
    ->schema([
        TextInput::make('secteur')->label('Secteur'),
        TextInput::make('adresse')->label('Adresse'),
        TextInput::make('site_web')->label('Site web')->url(),
        Textarea::make('horaires')->label('Horaires'),
        Textarea::make('services')->label('Services'),
        Textarea::make('reseaux_sociaux')->label('Réseaux sociaux'),
    ]),

Fieldset::make('Détails — Livre')
                ->relationship('livreDetail')
                ->visible(function (Get $get): bool {
                    $type = $get('type');
                    $type = $type instanceof TypeAnnonce ? $type->value : $type;
                    return $type === TypeAnnonce::Livre->value;
                })
                ->schema([
                    TextInput::make('auteur_nom')
                ->label('Auteur / Vendeur')
                ->maxLength(255),

            FileUpload::make('image_couverture')
                ->label('Image de couverture')
                ->image()
                ->disk('public')
                ->directory('annonces'),
                    TextInput::make('genre')->label('Genre'),
                    TextInput::make('editeur')->label('Éditeur'),
                    TextInput::make('annee_publication')->numeric()->label('Année de publication'),
                    TextInput::make('prix')->numeric()->label('Prix (HTG)'),
                    Select::make('etat')->label('État')->options([
                        'neuf' => 'Neuf',
                        'occasion' => 'Occasion',
                    ]),
                ]),
           
            ]);
    }
}
