<?php

namespace App\Http\Requests\Posts;

use Illuminate\Foundation\Http\FormRequest;

class CreatePostRequest extends FormRequest
{
    public function authorize(): bool
    {
        return (bool) $this->user();
    }

    public function rules(): array
    {
        return [
            'type'                      => ['required', 'string', 'in:text,artwork_share,upload,achievement'],
            'visibility'                => ['required', 'string', 'in:public,followers,private'],
            'body'                      => ['nullable', 'string', 'max:2000'],
            'targets'                   => ['nullable', 'array', 'max:1'],
            'targets.*.type'            => ['required_with:targets', 'string', 'in:artwork'],
            'targets.*.id'              => ['required_with:targets', 'integer', 'min:1'],
            'link_preview'              => ['nullable', 'array'],
            'link_preview.url'          => ['nullable', 'string', 'url', 'max:2048'],
            'link_preview.title'        => ['nullable', 'string', 'max:300'],
            'link_preview.description'  => ['nullable', 'string', 'max:500'],
            'link_preview.image'        => ['nullable', 'string', 'url', 'max:2048'],
            'link_preview.site_name'    => ['nullable', 'string', 'max:100'],
            'tagged_users'              => ['nullable', 'array', 'max:10'],
            'tagged_users.*.id'         => ['required_with:tagged_users', 'integer', 'min:1'],
            'tagged_users.*.username'   => ['required_with:tagged_users', 'string', 'max:50'],
            'tagged_users.*.name'       => ['nullable', 'string', 'max:100'],
            'publish_at'                => ['nullable', 'date', 'after:now'],
        ];
    }

    public function messages(): array
    {
        return [
            'body.max' => 'Post body cannot exceed 2,000 characters.',
        ];
    }
}
