<?php

namespace App\Filament\Resources\Tasks\Schemas;

use Filament\Forms\Components\DatePicker;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TagsInput;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Textarea;
use Filament\Schemas\Components\Section;
use Filament\Schemas\Schema;

class TaskForm
{
    public static function configure(Schema $schema): Schema
    {
        return $schema
            ->components([
                Section::make('Tarea')
                    ->columns(2)
                    ->schema([
                        TextInput::make('title')
                            ->label('Título')
                            ->required()
                            ->columnSpanFull(),
                        Textarea::make('description')
                            ->label('Descripción')
                            ->rows(3)
                            ->columnSpanFull(),
                        // Vocabulario fijo a propósito: la UI depende de su
                        // semántica (la palomita *significa* done).
                        Select::make('status')
                            ->label('Estado')
                            ->options([
                                'todo' => 'Por hacer',
                                'in_progress' => 'En curso',
                                'review' => 'En revisión',
                                'done' => 'Hecha',
                            ])
                            ->default('todo')
                            ->required(),
                        Select::make('priority')
                            ->label('Prioridad')
                            ->options([
                                'low' => 'Baja',
                                'medium' => 'Media',
                                'high' => 'Alta',
                            ])
                            ->default('medium')
                            ->required(),
                        DatePicker::make('due_date')
                            ->label('Vence'),
                        TextInput::make('assignee')
                            ->label('Responsable'),
                    ]),

                Section::make('Relaciones')
                    ->columns(2)
                    ->schema([
                        Select::make('project_id')
                            ->label('Proyecto')
                            ->relationship('project', 'name')
                            ->searchable()
                            ->preload(),
                        Select::make('lead_id')
                            ->label('Lead')
                            ->relationship('lead', 'company')
                            ->searchable()
                            ->preload(),
                        Select::make('deal_id')
                            ->label('Negocio')
                            ->relationship('deal', 'title')
                            ->searchable()
                            ->preload(),
                        Select::make('quote_id')
                            ->label('Cotización')
                            ->relationship('quote', 'quote_number')
                            ->searchable()
                            ->preload(),
                        Select::make('parent_task_id')
                            ->label('Tarea padre')
                            ->relationship('parent', 'title')
                            ->searchable()
                            ->preload(),
                    ]),

                Section::make('Detalles')
                    ->columns(2)
                    ->schema([
                        // images es text[], no JSON: TagsInput entrega un
                        // array de PHP, que es lo que espera el cast.
                        TagsInput::make('images')
                            ->label('Imágenes (URLs)')
                            ->columnSpanFull(),
                        TextInput::make('position')
                            ->label('Posición')
                            ->numeric()
                            ->default(0),
                        TextInput::make('external_ref')
                            ->label('Referencia externa')
                            ->helperText('Lo usa el webhook de Reclaim para no duplicar tareas.'),
                    ]),
            ]);
    }
}
