<?php

declare(strict_types=1);

namespace App\Filament\Resources\ConsultationRequests\Pages;

use App\Filament\Resources\ConsultationRequests\ConsultationRequestResource;
use App\Models\ConsultationRequest;
use Filament\Actions\Action;
use Filament\Infolists\Components\TextEntry;
use Filament\Resources\Pages\ViewRecord;
use Filament\Schemas\Components\Section;
use Filament\Schemas\Schema;
use Filament\Notifications\Notification;

class ViewConsultationRequest extends ViewRecord
{
    protected static string $resource = ConsultationRequestResource::class;

    protected function getHeaderActions(): array
    {
        return [
            Action::make('notifyProvider')
                ->label('ارسال پیام/اعلان به خدمات‌دهنده')
                ->icon('heroicon-o-bell-alert')
                ->color('gray')
                ->action(function (): void {
                    Notification::make()
                        ->title('ارسال اعلان به خدمات‌دهنده در نسخه بعد پیاده‌سازی می‌شود.')
                        ->info()
                        ->send();
                }),
        ];
    }

    public function mount(int|string $record): void
    {
        parent::mount($record);
        $this->getRecord()->load(['producer.user', 'expert']);
    }

    public function infolist(Schema $schema): Schema
    {
        $record = $this->getRecord();
        return $schema
            ->components([
                Section::make('جزئیات درخواست')
                    ->schema([
                        TextEntry::make('producer.brand_name')->label('نام تولیدکننده')->placeholder('-'),
                        TextEntry::make('expert.display_name')
                            ->label('نام خدمات‌دهنده انتخاب‌شده')
                            ->getStateUsing(fn () => $record->expert?->display_name ?? '-'),
                        TextEntry::make('type')
                            ->label('نوع مشاوره')
                            ->formatStateUsing(fn (?string $state) => ConsultationRequest::typeOptions()[$state] ?? $state ?? '-'),
                        TextEntry::make('format')
                            ->label('نحوه برگزاری')
                            ->formatStateUsing(fn (?string $state) => ConsultationRequest::formatOptions()[$state] ?? $state ?? '-'),
                        TextEntry::make('priority')
                            ->label('اولویت')
                            ->formatStateUsing(fn (?string $state) => ConsultationRequest::priorityOptions()[$state] ?? $state ?? '-'),
                        TextEntry::make('status')
                            ->label('وضعیت')
                            ->badge()
                            ->formatStateUsing(fn (?string $state) => ConsultationRequest::statusOptions()[$state] ?? '-')
                            ->color(fn (?string $state) => match ($state) {
                                ConsultationRequest::STATUS_APPROVED => 'success',
                                ConsultationRequest::STATUS_REJECTED => 'danger',
                                ConsultationRequest::STATUS_CLOSED => 'gray',
                                default => 'warning',
                            }),
                        TextEntry::make('message')->label('پیام کاربر')->placeholder('-')->columnSpanFull(),
                        TextEntry::make('production_address')->label('آدرس واحد تولیدی')->placeholder('-')->columnSpanFull(),
                        TextEntry::make('producer_contact')->label('راه ارتباطی با تولیدکننده')->placeholder('-'),
                        TextEntry::make('provider_can_visit')
                            ->label('تایید مراجعه توسط خدمات‌دهنده')
                            ->formatStateUsing(fn ($state) => $state === true ? 'بله' : ($state === false ? 'خیر' : '—')),
                        TextEntry::make('admin_notes')->label('یادداشت ادمین')->placeholder('-')->columnSpanFull(),
                        TextEntry::make('closed_at')->label('تاریخ بستن')->dateTime('Y/m/d H:i')->placeholder('-'),
                    ])
                    ->columns(2),
            ]);
    }
}
