<?php

declare(strict_types=1);

namespace App\Filament\Resources\RationReports\Schemas;

use App\Models\Report;
use App\Models\ReportRationWeekly;
use Filament\Forms\Components\DatePicker;
use Filament\Forms\Components\FileUpload;
use Filament\Forms\Components\Repeater;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Checkbox;
use Filament\Schemas\Components\Group;
use Filament\Schemas\Components\Section;
use Filament\Schemas\Schema;

class RationReportForm
{
    public static function configure(Schema $schema): Schema
    {
        return $schema->components([
            Group::make()
                ->schema([
                    Section::make('اطلاعات اصلی')
                        ->schema([
                            \App\Filament\Components\Form\ProjectSelect::create()
                                ->label('پروژه')
                                ->searchable()
                                ->required(),
                            DatePicker::make('date')
                                ->label('تاریخ')
                                ->required()
                                ->default(now())
                                ->jalali()
                                ->columnSpan(6),
                            \App\Filament\Components\Form\ProducerSelect::create()
                                ->label('خدمات‌دهنده')
                                ->searchable(),
                            \App\Filament\Components\Form\UserSelect::create()
                                ->label('کاربر'),
                            TextInput::make('title')
                                ->label('عنوان')
                                ->required()
                                ->maxLength(255)
                                ->default(fn () => 'جیره - ' . now()->format('Y/m/d'))
                                ->columnSpan(12),
                            TextInput::make('ration_type')
                                ->label('نوع جیره')
                                ->maxLength(100)
                                ->columnSpan(12),
                            Section::make('گروه مصرف‌کننده (انتخاب محصولات)')
                                ->schema([
                                    Repeater::make('items')
                                        ->relationship()
                                        ->schema([
                                            TextInput::make('group_name')
                                                ->label('نام گروه')
                                                ->placeholder('مثلاً گروه A')
                                                ->columnSpan(4),
                                            \App\Filament\Components\Form\ProductSelect::create()
                                                ->label('محصول')
                                                ->columnSpan(8)
                                                ->distinct()
                                                ->disableOptionsWhenSelectedInSiblingRepeaterItems(),
                                        ])
                                        ->columns(12)
                                        ->addActionLabel('افزودن محصول به گروه')
                                        ->collapsible()
                                        ->columnSpan(12),
                                ])
                                ->columns(12)
                                ->columnSpan(12),
                        ])
                        ->columns(12)
                        ->columnSpan(12),

                    Section::make('ترکیبات جیره')
                        ->schema([
                            Repeater::make('rationIngredients')
                                ->relationship()
                                ->schema([
                                    TextInput::make('name')->label('نام خوراک')->required()->columnSpan(3),
                                    TextInput::make('unit')->label('واحد اندازه‌گیری')->placeholder('kg')->columnSpan(2),
                                    TextInput::make('quantity_per_unit')->label('مقدار هر واحد')->numeric()->default(0)->columnSpan(2),
                                    TextInput::make('price_per_unit')->label('قیمت به ازای هر واحد')->numeric()->default(0)->columnSpan(2),
                                ])
                                ->columns(12)
                                ->addActionLabel('افزودن آیتم')
                                ->collapsible()
                                ->deletable(true)
                                ->columnSpan(12),
                        ])
                        ->columns(12)
                        ->columnSpan(12),

                    Section::make('برنامه تغذیه روزانه')
                        ->schema([
                            Repeater::make('feedingMeals')
                                ->relationship()
                                ->schema([
                                    TextInput::make('meal_time')->label('زمان وعده')->placeholder('08:00')->columnSpan(3),
                                    TextInput::make('name')->label('نام وعده')->columnSpan(3),
                                    TextInput::make('percent_of_total')->label('درصد از کل جیره')->numeric()->default(0)->columnSpan(2),
                                ])
                                ->columns(12)
                                ->addActionLabel('افزودن وعده جدید')
                                ->collapsible()
                                ->deletable(true)
                                ->columnSpan(12),
                        ])
                        ->columns(12)
                        ->columnSpan(12),

                    Section::make('برنامه هفتگی')
                        ->schema([
                            Repeater::make('rationWeekly')
                                ->relationship()
                                ->schema([
                                    Select::make('day_of_week')
                                        ->label('روز')
                                        ->options(ReportRationWeekly::dayNames())
                                        ->required()
                                        ->columnSpan(3),
                                    Checkbox::make('is_active')->label('فعال')->default(true)->columnSpan(2),
                                    Select::make('status')
                                        ->label('وضعیت')
                                        ->options(ReportRationWeekly::statusOptions())
                                        ->default(ReportRationWeekly::STATUS_NORMAL)
                                        ->columnSpan(3),
                                ])
                                ->columns(12)
                                ->addActionLabel('افزودن روز')
                                ->collapsible()
                                ->deletable(true)
                                ->columnSpan(12),
                        ])
                        ->columns(12)
                        ->columnSpan(12),

                    Section::make('دستورات ویژه')
                        ->schema([
                            TextInput::make('water_temp')->label('دمای آب (سانتی‌گراد)')->numeric()->columnSpan(4),
                            TextInput::make('water_per_unit_daily')->label('مقدار آب مصرفی روزانه به ازای واحد (لیتر)')->numeric()->columnSpan(4),
                            TextInput::make('wait_between_meals_hours')->label('زمان انتظار بین وعده‌ها (ساعت)')->numeric()->columnSpan(4),
                            Select::make('mix_type')
                                ->label('نوع مخلوط کردن')
                                ->options(Report::mixTypeOptions())
                                ->columnSpan(12),
                        ])
                        ->columns(12)
                        ->columnSpan(12),

                    Section::make('یادداشت‌ها و پیوست‌ها')
                        ->schema([
                            Textarea::make('warnings')->label('نکات و هشدارها')->rows(2)->columnSpan(12),
                            \App\Filament\Components\Form\DescTextarea::create()
                                ->label('یادداشت‌ها (توضیحات مهم)'),
                            FileUpload::make('attachments')
                                ->label('تصاویر/اسناد/گزارشات')
                                ->multiple()
                                ->directory('files/reports/ration')
                                ->columnSpan(12),
                            FileUpload::make('documents')
                                ->label('سایر اسناد')
                                ->multiple()
                                ->directory('files/reports/ration_docs')
                                ->columnSpan(12),
                        ])
                        ->columns(12)
                        ->columnSpan(12),

                    Section::make('وضعیت')
                        ->schema([
                            Select::make('status')
                                ->label('وضعیت')
                                ->options([
                                    'draft' => 'پیش‌نویس',
                                    'published' => 'منتشر شده',
                                    'archived' => 'بایگانی شده',
                                ])
                                ->default('draft')
                                ->columnSpan(4),
                            Select::make('workflow_status')
                                ->label('وضعیت رسیدگی')
                                ->options([
                                    Report::WORKFLOW_PENDING => 'انتظار',
                                    Report::WORKFLOW_APPROVED => 'تایید',
                                    Report::WORKFLOW_REJECTED => 'رد',
                                    Report::WORKFLOW_NEEDS_EDIT => 'ویرایش',
                                ])
                                ->default(Report::WORKFLOW_PENDING)
                                ->columnSpan(4),
                            \Filament\Forms\Components\Toggle::make('create_invoice')
                                ->label('نیاز به ثبت فاکتور')
                                ->default(false)
                                ->columnSpan(4),
                        ])
                        ->columns(12)
                        ->columnSpan(12),
                ])
                ->columns(12)
                ->columnSpan(8),

            Group::make()
                ->schema([
                    Section::make('اطلاعات سیستم')
                        ->schema([
                            \App\Filament\Components\Form\CreatedBySelect::create()->required(),
                            \App\Filament\Components\Form\UpdatedBySelect::create(),
                        ])
                        ->columns(12)
                        ->columnSpan(12),
                ])
                ->columns(12)
                ->columnSpan(4),
        ])
        ->columns(12);
    }
}
