<?php

namespace App\Http\Requests;

use App\Traits\ConvertsBase64ToFiles;
use Illuminate\Foundation\Http\FormRequest;

class AppHeroSectionRequest extends FormRequest
{
    use ConvertsBase64ToFiles;

    public function authorize(): bool
    {
        return true;
    }

    public function rules(): array
    {
        return [
            'title' => 'nullable|string|min:2|max:180',
            'subtitle' => 'nullable|string|min:2|max:255',
            'is_active' => 'required|boolean',
            'order_no' => 'nullable|integer|min:0',
            'image' => $this->imageRule(),
        ];
    }

    protected function prepareForValidation()
    {
        $input = $this->input();

        if (isset($input['data']['attributes']) && is_array($input['data']['attributes'])) {
            $input = $input['data']['attributes'];
        }

        if (array_key_exists('order_no', $input) && ($input['order_no'] === null || $input['order_no'] === '')) {
            $input['order_no'] = 0;
        }

        if ($this->method() !== 'POST' && isset($input['image']) && !isImageBase64($input['image'])) {
            unset($input['image']);
            $this->replace($input);
            return;
        }

        $this->replace($input ?? []);
        $this->convertBase64ToFiles();
    }

    protected function base64FileKeys(): array
    {
        return ['image'];
    }

    protected function imageRule(): array
    {
        $required = $this->method() === 'POST' ? 'required' : 'nullable';

        return [
            $required,
            'image',
            'mimes:webp,jpg,jpeg,png',
            'dimensions:min_width=2500,min_height=900',
        ];
    }
}
