<?php

namespace App\Http\Requests\Admin;

use Illuminate\Foundation\Http\FormRequest;

class UpdatePlatformSettingsRequest extends FormRequest
{
    public function authorize(): bool
    {
        return true;
    }

    /**
     * @return array<string, mixed>
     */
    public function rules(): array
    {
        return [
            'platform_name' => ['required', 'string', 'max:255'],
            'ai_enabled' => ['required', 'boolean'],
            'registration_bonus_points' => ['required', 'integer', 'min:0', 'max:100000000'],
            'referral_bonus_points' => ['required', 'integer', 'min:0', 'max:100000000'],
            'general_notes' => ['nullable', 'string', 'max:5000'],
            'image_model' => ['required', 'string', 'in:gpt-image-1,gpt-image-1-mini'],
            'image_default_quality' => ['required', 'string', 'in:low,medium,high,auto'],
            'image_prompt_enhancer_enabled' => ['required', 'boolean'],
            'image_cost_per_generation' => ['required', 'integer', 'min:0', 'max:100000000'],
            'app_logo' => ['nullable', 'file', 'mimes:png,jpg,jpeg,webp,svg', 'max:2048'],
            'app_icon' => ['nullable', 'image', 'mimes:png,jpg,jpeg,webp', 'max:1024', 'dimensions:min_width=64,min_height=64'],
            'remove_app_logo' => ['sometimes', 'boolean'],
            'remove_app_icon' => ['sometimes', 'boolean'],
            'google_play_url' => ['nullable', 'string', 'max:500', 'url'],
            'apple_app_store_url' => ['nullable', 'string', 'max:500', 'url'],
        ];
    }

    protected function prepareForValidation(): void
    {
        $merge = [
            'ai_enabled' => $this->boolean('ai_enabled'),
            'image_prompt_enhancer_enabled' => $this->boolean('image_prompt_enhancer_enabled'),
            'remove_app_logo' => $this->boolean('remove_app_logo'),
            'remove_app_icon' => $this->boolean('remove_app_icon'),
        ];

        foreach (['google_play_url', 'apple_app_store_url'] as $field) {
            $value = $this->input($field);
            if (is_string($value) && trim($value) === '') {
                $merge[$field] = null;
            }
        }

        $this->merge($merge);
    }

    /**
     * @return array<string, string>
     */
    public function messages(): array
    {
        return [
            'app_logo.image' => 'ملف الشعار يجب أن يكون صورة.',
            'app_logo.max' => 'حجم الشعار يجب ألا يتجاوز 2 ميجابايت.',
            'app_icon.image' => 'ملف الأيقونة يجب أن يكون صورة.',
            'app_icon.max' => 'حجم الأيقونة يجب ألا يتجاوز 1 ميجابايت.',
            'app_icon.dimensions' => 'الأيقونة يفضّل أن تكون مربعة (64×64 على الأقل).',
            'google_play_url.url' => 'رابط Google Play يجب أن يكون عنوان URL صالحاً.',
            'apple_app_store_url.url' => 'رابط App Store يجب أن يكون عنوان URL صالحاً.',
        ];
    }
}
