<?php

declare(strict_types=1);

namespace App\Filament\Resources\HealthReports\Schemas;

use App\Models\Report;
use Filament\Forms\Components\DatePicker;
use Filament\Forms\Components\DateTimePicker;
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\Schemas\Components\Group;
use Filament\Schemas\Components\Section;
use Filament\Schemas\Schema;

class HealthReportForm
{
    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(),
                            DateTimePicker::make('report_at')
                                ->label('تاریخ/زمان')
                                ->default(now())
                                ->jalali()
                                ->required()
                                ->columnSpan(6),
                            DatePicker::make('date')
                                ->label('تاریخ گزارش')
                                ->default(now())
                                ->jalali()
                                ->required()
                                ->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('disease_name')
                                ->label('نام بیماری')
                                ->maxLength(255)
                                ->columnSpan(6),
                            Select::make('report_type')
                                ->label('نوع گزارش')
                                ->options(Report::healthReportTypes())
                                ->searchable()
                                ->required()
                                ->columnSpan(6),
                            Section::make('انتخاب محصول/محصولات')
                                ->schema([
                                    Repeater::make('items')
                                        ->relationship()
                                        ->schema([
                                            \App\Filament\Components\Form\ProductSelect::create()
                                                ->label('محصول')
                                                ->columnSpan(12),
                                        ])
                                        ->columns(12)
                                        ->addActionLabel('افزودن محصول')
                                        ->collapsible()
                                        ->columnSpan(12),
                                ])
                                ->columns(12)
                                ->columnSpan(12),
                        ])
                        ->columns(12)
                        ->columnSpan(12),

                    Section::make('تشخیص و نظر کارشناسی')
                        ->schema([
                            Textarea::make('diagnosis')
                                ->label('تشخیص (توسط خدمات‌دهنده)')
                                ->rows(3)
                                ->columnSpan(12),
                            Textarea::make('expert_opinion')
                                ->label('نظر کارشناسی (توصیه برای محصول)')
                                ->rows(3)
                                ->columnSpan(12),
                        ])
                        ->columns(12)
                        ->columnSpan(12),

                    Section::make('اقلام مصرفی')
                        ->schema([
                            Repeater::make('consumables')
                                ->relationship()
                                ->schema([
                                    TextInput::make('name')->label('نام')->required()->columnSpan(4),
                                    Select::make('unit')
                                        ->label('واحد')
                                        ->options([
                                            'weight' => 'وزن',
                                            'count' => 'تعداد',
                                            'volume' => 'حجم',
                                        ])
                                        ->columnSpan(2),
                                    TextInput::make('quantity')->label('مقدار')->numeric()->default(0)->columnSpan(2),
                                    TextInput::make('unit_price')->label('قیمت واحد')->numeric()->columnSpan(2),
                                ])
                                ->columns(12)
                                ->addActionLabel('افزودن مصرفی جدید')
                                ->collapsible()
                                ->deletable(true)
                                ->columnSpan(12),
                        ])
                        ->columns(12)
                        ->columnSpan(12),

                    Section::make('هزینه و فاکتور')
                        ->schema([
                            TextInput::make('total_cost')
                                ->label('مبلغ کل')
                                ->numeric()
                                ->columnSpan(6),
                            Repeater::make('invoiceItems')
                                ->relationship()
                                ->schema([
                                    TextInput::make('title')->label('عنوان (حق‌العمل/ریز)')->required()->columnSpan(6),
                                    TextInput::make('amount')->label('مبلغ')->numeric()->default(0)->columnSpan(4),
                                ])
                                ->columns(12)
                                ->addActionLabel('افزودن آیتم فاکتور')
                                ->collapsible()
                                ->deletable(true)
                                ->columnSpan(12),
                            FileUpload::make('invoice_image')
                                ->label('تصویر فاکتور (مهر/امضا)')
                                ->image()
                                ->directory('files/reports/invoices')
                                ->columnSpan(12),
                        ])
                        ->columns(12)
                        ->columnSpan(12),

                    Section::make('گزارش و پیوست‌ها')
                        ->schema([
                            Textarea::make('written_report')
                                ->label('گزارش مکتوب (شرح حال)')
                                ->rows(4)
                                ->columnSpan(12),
                            \App\Filament\Components\Form\DescTextarea::create()
                                ->label('یادداشت'),
                            FileUpload::make('attachments')
                                ->label('تصاویر/ویدئو محصول')
                                ->multiple()
                                ->acceptedFileTypes([
                                    'image/jpeg',
                                    'image/png',
                                    'image/webp',
                                    'image/gif',
                                    'video/mp4',
                                    'video/quicktime',
                                    'video/webm',
                                ])
                                ->directory('files/reports/attachments')
                                ->columnSpan(12),
                            FileUpload::make('documents')
                                ->label('سایر اسناد')
                                ->multiple()
                                ->directory('files/reports/documents')
                                ->columnSpan(12),
                            DatePicker::make('next_visit_at')
                                ->label('تاریخ مراجعه بعدی')
                                ->jalali()
                                ->columnSpan(6),
                            TextInput::make('product_weight')
                                ->label('وزن محصول (kg)')
                                ->numeric()
                                ->columnSpan(6)
                                ->visible(fn ($get) => $get('report_type') === Report::HEALTH_TYPE_REMOVE_PRODUCT),
                        ])
                        ->columns(12)
                        ->columnSpan(12),

                    Section::make('وضعیت')
                        ->schema([
                            Select::make('status')
                                ->label('وضعیت')
                                ->options([
                                    'draft' => 'پیش‌نویس',
                                    'published' => 'منتشر شده',
                                    'archived' => 'بایگانی شده',
                                ])
                                ->default('draft')
                                ->columnSpan(6),
                            Select::make('workflow_status')
                                ->label('وضعیت رسیدگی')
                                ->options([
                                    Report::WORKFLOW_PENDING => 'انتظار',
                                    Report::WORKFLOW_APPROVED => 'تایید',
                                    Report::WORKFLOW_REJECTED => 'رد',
                                    Report::WORKFLOW_NEEDS_EDIT => 'ویرایش',
                                ])
                                ->default(Report::WORKFLOW_PENDING)
                                ->columnSpan(6),
                        ])
                        ->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);
    }
}
