<?php

namespace App\Filament\Resources\Customers\Schemas;

use Filament\Schemas\Schema;
use App\Filament\Helpers\FormHelper;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
use Filament\Schemas\Components\Section;
use Filament\Forms\Components\ToggleButtons;
use Filament\Forms\Components\Repeater;
use Filament\Forms\Components\Select;

class CustomerForm
{
    public static function configure(Schema $schema): Schema
    {
        return $schema
            ->components([
                Section::make(__('filament/admin/customer_resource.basic_information'))
                    ->description(__('filament/admin/customer_resource.basic_information_description'))
                    ->collapsible()
                    ->collapsed(false)
                    ->schema([
                        TextInput::make('code')
                            ->label(__('filament/admin/customer_resource.code'))
                            ->placeholder(__('filament/admin/customer_resource.code_placeholder'))
                            ->helperText(__('filament/admin/customer_resource.code_help'))
                            ->disabled()
                            ->dehydrated(false)
                            ->default(fn() => 'CUS-' . date('Y') . '-' . str_pad(\App\Models\Customer::whereYear('created_at', date('Y'))->count() + 1, 6, '0', STR_PAD_LEFT)),
                        TextInput::make('name')
                            ->label(__('filament/admin/customer_resource.name'))
                            ->placeholder(__('filament/admin/customer_resource.name_placeholder'))
                            ->helperText(__('filament/admin/customer_resource.name_help'))
                            ->required()
                            ->minLength(2)
                            ->maxLength(255),
                    ]),
                Section::make(__('filament/admin/customer_resource.contact_information'))
                    ->description(__('filament/admin/customer_resource.contact_information_description'))
                    ->collapsible()
                    ->collapsed(false)
                    ->schema([
                        TextInput::make('email')
                            ->label(__('filament/admin/customer_resource.email'))
                            ->placeholder(__('filament/admin/customer_resource.email_placeholder'))
                            ->helperText(__('filament/admin/customer_resource.email_help'))
                            ->email()
                            ->default(null),
                        TextInput::make('phone')
                            ->label(__('filament/admin/customer_resource.phone'))
                            ->placeholder(__('filament/admin/customer_resource.phone_placeholder'))
                            ->helperText(__('filament/admin/customer_resource.phone_help'))
                            ->tel()
                            ->default(null),
                        Textarea::make('address')
                            ->label(__('filament/admin/customer_resource.address'))
                            ->placeholder(__('filament/admin/customer_resource.address_placeholder'))
                            ->helperText(__('filament/admin/customer_resource.address_help'))
                            ->default(null)
                            ->maxLength(500)
                            ->columnSpanFull(),
                    ]),
                Section::make(__('filament/admin/customer_resource.financial_information'))
                    ->description(__('filament/admin/customer_resource.financial_information_description'))
                    ->collapsible()
                    ->collapsed(false)
                    ->schema([
                        TextInput::make('credit_limit')
                            ->label(__('filament/admin/customer_resource.credit_limit'))
                            ->placeholder(__('filament/admin/customer_resource.credit_limit_placeholder'))
                            ->helperText(__('filament/admin/customer_resource.credit_limit_help'))
                            ->required()
                            ->numeric()
                            ->minValue(0)
                            ->step(1)
                            ->default(0.0)
                            ->prefix('EGP'),
                        TextInput::make('current_balance')
                            ->label(__('filament/admin/customer_resource.current_balance'))
                            ->placeholder(__('filament/admin/customer_resource.current_balance_placeholder'))
                            ->helperText(__('filament/admin/customer_resource.current_balance_help'))
                            ->required()
                            ->numeric()
                            ->minValue(0)
                            ->step(1)
                            ->default(0.0)
                            ->prefix('EGP')
                            ->disabled(),
                    ]),
                Section::make(__('filament/admin/farm_resource.plural_model_label'))
                    ->description('إضافة المزارع المرتبطة بهذا العميل')
                    ->collapsible()
                    ->collapsed(false)
                    ->schema([
                        Repeater::make('farms')
                            ->label(__('filament/admin/customer_resource.farms'))
                            ->relationship('farms')
                            ->schema([
                                Select::make('id')
                                    ->label(__('filament/admin/customer_resource.id'))
                                    ->options(fn() => \App\Models\Farm::pluck('name', 'id'))
                                    ->searchable()
                                    ->preload()
                                    ->distinct()
                                    ->disableOptionsWhenSelectedInSiblingRepeaterItems()
                                    ->columnSpan(2),
                            ])
                            ->addActionLabel('إضافة مزرعة')
                            ->createItemButtonLabel('+ اضافة مزرعة جديدة')
                            ->columnSpanFull()
                            ->columns(2)
                            ->defaultItems(0)
                            ->minItems(0),
                    ]),
                Section::make(__('filament/admin/customer_resource.settings'))
                    ->description(__('filament/admin/customer_resource.settings_description'))
                    ->collapsible()
                    ->collapsed(false)
                    ->schema([
                        ToggleButtons::make('is_active')
                            ->label(__('filament/admin/customer_resource.is_active'))
                            ->helperText(__('filament/admin/customer_resource.is_active_help'))
                            ->boolean()
                            ->required(),
                    ]),
            ]);
    }
}
