<?php

declare(strict_types=1);

namespace App\Filament\Resources\Partners\Schemas;

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

class PartnerForm
{
    public static function configure(Schema $schema): Schema
    {
        return $schema
            ->components([
                Section::make('Datos del socio')
                    ->icon('heroicon-o-user')
                    ->schema([
                        TextInput::make('name')
                            ->label('Nombre completo')
                            ->required()
                            ->maxLength(255),

                        Select::make('document_type')
                            ->label('Tipo de documento')
                            ->options([
                                'cc' => 'Cédula de ciudadanía',
                                'nit' => 'NIT',
                                'passport' => 'Pasaporte',
                                'ce' => 'Cédula de extranjería',
                            ]),

                        TextInput::make('document_number')
                            ->label('Número de documento')
                            ->maxLength(50),

                        TextInput::make('email')
                            ->label('Correo electrónico')
                            ->email()
                            ->maxLength(255),

                        TextInput::make('phone')
                            ->label('Teléfono')
                            ->tel()
                            ->maxLength(50),

                        DatePicker::make('joined_at')
                            ->label('Fecha de ingreso')
                            ->required()
                            ->default(now()),
                    ])
                    ->columns(2),

                Section::make('Modelo de participación')
                    ->icon('heroicon-o-chart-pie')
                    ->schema([
                        Select::make('ownership_model')
                            ->label('Modelo de propiedad')
                            ->options([
                                'fixed' => 'Porcentaje fijo',
                                'dynamic' => 'Basado en capital (dinámico)',
                            ])
                            ->default('dynamic')
                            ->required()
                            ->live()
                            ->helperText(fn ($state) => match ($state) {
                                'fixed' => 'El porcentaje se asigna manualmente y no cambia con nuevos aportes.',
                                'dynamic' => 'El porcentaje se calcula automáticamente según la proporción de capital aportado.',
                                default => '',
                            }),

                        TextInput::make('fixed_ownership_percentage')
                            ->label('Porcentaje fijo (%)')
                            ->numeric()
                            ->minValue(0)
                            ->maxValue(100)
                            ->step(0.01)
                            ->suffix('%')
                            ->visible(fn ($get) => $get('ownership_model') === 'fixed')
                            ->required(fn ($get) => $get('ownership_model') === 'fixed'),

                        Select::make('status')
                            ->label('Estado')
                            ->options([
                                'active' => 'Activo',
                                'inactive' => 'Inactivo',
                                'suspended' => 'Suspendido',
                            ])
                            ->default('active')
                            ->required(),

                        DatePicker::make('exited_at')
                            ->label('Fecha de salida')
                            ->visible(fn ($get) => in_array($get('status'), ['inactive', 'suspended'])),
                    ])
                    ->columns(2),

                Section::make('Notas')
                    ->icon('heroicon-o-chat-bubble-left-ellipsis')
                    ->schema([
                        Textarea::make('notes')
                            ->label('Observaciones')
                            ->rows(3)
                            ->columnSpanFull(),
                    ])
                    ->collapsible()
                    ->collapsed(),
            ]);
    }
}
