<?php

namespace App\Filament\Resources\Employees\Schemas;

use App\Enums\EmploymentStatus;
use App\Enums\Gender;
use App\Filament\Support\HrForm;
use Filament\Forms\Components\DatePicker;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Textarea;
use Filament\Schemas\Components\Tabs;
use Filament\Schemas\Components\Tabs\Tab;
use Filament\Schemas\Schema;

class EmployeeForm
{
    public static function configure(Schema $schema): Schema
    {
        return $schema
            ->components([
                Tabs::make(__('hr.tabs.employee'))
                    ->tabs([
                        Tab::make(__('hr.tabs.personal'))
                            ->schema([
                                HrForm::fileUpload('profile_photo_path')
                                    ->label(__('hr.fields.photo'))
                                    ->image()
                                    ->avatar()
                                    ->imageEditor(),
                                TextInput::make('employee_number')
                                    ->required()
                                    ->maxLength(50)
                                    ->unique(ignoreRecord: true),
                                TextInput::make('full_name')
                                    ->required()
                                    ->maxLength(255),
                                TextInput::make('national_id')
                                    ->label(__('hr.fields.national_id'))
                                    ->maxLength(50),
                                Select::make('gender')
                                    ->options(Gender::class)
                                    ->required()
                                    ->native(false),
                                DatePicker::make('birth_date')
                                    ->required(),
                                TextInput::make('phone')
                                    ->tel()
                                    ->default(config('hr.default_phone'))
                                    ->required(),
                                Textarea::make('address')
                                    ->rows(3)
                                    ->columnSpanFull(),
                            ])
                            ->columns(2),
                        Tab::make(__('hr.tabs.employment'))
                            ->schema([
                                Select::make('department_id')
                                    ->relationship('department', 'name')
                                    ->searchable()
                                    ->preload()
                                    ->required(),
                                Select::make('position_id')
                                    ->relationship('position', 'name')
                                    ->searchable()
                                    ->preload()
                                    ->required(),
                                Select::make('shift_id')
                                    ->relationship('shift', 'name')
                                    ->searchable()
                                    ->preload()
                                    ->required(),
                                Select::make('employment_status')
                                    ->options(EmploymentStatus::class)
                                    ->default(EmploymentStatus::Active)
                                    ->required()
                                    ->native(false),
                                DatePicker::make('hire_date')
                                    ->required(),
                                DatePicker::make('termination_date'),
                                Textarea::make('notes')
                                    ->rows(4)
                                    ->columnSpanFull(),
                            ])
                            ->columns(2),
                    ])
                    ->columnSpanFull(),
            ]);
    }
}
