<?php

namespace App\Filament\Pages;

use App\Models\PointSetting;
use Filament\Forms;
use Filament\Notifications\Notification;
use Filament\Pages\Page;
use Filament\Schemas\Components\Section;
use Filament\Schemas\Schema;

class PointSettings extends Page
{
    protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-cog-6-tooth';

    protected static string | \UnitEnum | null $navigationGroup = 'الإعدادات';

    protected static ?string $navigationLabel = 'إعدادات النقاط';

    protected static ?string $title = 'إعدادات نظام النقاط';

    protected static ?int $navigationSort = 10;

    public static function canAccess(): bool
    {
        return auth()->user()?->hasPermissionTo('manage_point_settings') ?? false;
    }

    protected string $view = 'filament.pages.point-settings';

    public ?array $data = [];

    public function mount(): void
    {
        $settings = PointSetting::current();
        $this->form->fill([
            'egp_per_point' => $settings->egp_per_point,
            'point_value_in_egp' => $settings->point_value_in_egp,
        ]);
    }

    public function form(Schema $form): Schema
    {
        return $form
            ->schema([
                Section::make('إعدادات اكتساب النقاط')
                    ->description('حدد كيف يكتسب التاجر النقاط عند إتمام الطلبات')
                    ->schema([
                        Forms\Components\TextInput::make('egp_per_point')
                            ->label('كل كم جنيه = نقطة واحدة')
                            ->helperText('مثال: إذا كانت القيمة 10، فكل 10 جنيه في الطلب = نقطة واحدة')
                            ->numeric()
                            ->required()
                            ->minValue(1)
                            ->suffix('ج.م'),
                    ]),

                Section::make('إعدادات استبدال النقاط')
                    ->description('حدد قيمة النقطة عند الاستبدال بخصم')
                    ->schema([
                        Forms\Components\TextInput::make('point_value_in_egp')
                            ->label('قيمة النقطة الواحدة بالجنيه')
                            ->helperText('مثال: إذا كانت القيمة 1، فكل نقطة = 1 جنيه خصم')
                            ->numeric()
                            ->required()
                            ->minValue(0.01)
                            ->step(0.01)
                            ->suffix('ج.م'),
                    ]),
            ])
            ->statePath('data');
    }

    public function save(): void
    {
        $data = $this->form->getState();

        $settings = PointSetting::first();
        if ($settings) {
            $settings->update($data);
        } else {
            PointSetting::create($data);
        }

        Notification::make()
            ->title('تم حفظ إعدادات النقاط بنجاح')
            ->success()
            ->send();
    }
}
