<?php

declare(strict_types=1);

namespace App\Http\Requests\Message;

use Illuminate\Foundation\Http\FormRequest;

class StoreMessageRequest extends FormRequest
{
    public function authorize(): bool
    {
        return $this->user() !== null;
    }

    protected function prepareForValidation(): void
    {
        if ($this->has('message') && is_string($this->input('message'))) {
            $trimmed = trim($this->input('message'));
            $this->merge([
                'message' => $trimmed === '' ? null : $trimmed,
            ]);
        }
    }

    /**
     * @return array<string, array<int, string>>
     */
    public function rules(): array
    {
        return [
            'message' => ['required_without:image', 'nullable', 'string', 'max:10000'],
            'image' => ['required_without:message', 'nullable', 'file', 'image', 'mimes:jpeg,jpg,png,webp', 'max:5120'],
        ];
    }

    /**
     * @return array<string, string>
     */
    public function messages(): array
    {
        return [
            'message.required_without' => 'Saisissez un message ou joignez une image.',
            'image.required_without' => 'Saisissez un message ou joignez une image.',
            'image.mimes' => 'L’image doit être au format JPEG, PNG ou WebP.',
            'image.max' => 'L’image ne doit pas dépasser 5 Mo.',
        ];
    }
}
