<?php

namespace App\Domain\Manga\Infrastructure\ApiPlatform\Resource;

use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Post;
use ApiPlatform\OpenApi\Model\Operation;
use ApiPlatform\OpenApi\Model\RequestBody;
use App\Domain\Manga\Infrastructure\ApiPlatform\State\Processor\FetchMangaChaptersProcessor;
use Symfony\Component\Validator\Constraints as Assert;

#[ApiResource(
    shortName: 'Mangadex',
    operations: [
        new Post(
            uriTemplate: '/manga/chapters/fetch',
            processor: FetchMangaChaptersProcessor::class,
            status: 202,
            description: 'Déclenche la récupération des chapitres d\'un manga',
            openapi: new Operation(
                summary: 'Récupérer les chapitres d\'un manga',
                description: 'Lance le processus de récupération des chapitres depuis la source externe pour un manga donné',
                requestBody: new RequestBody(
                    description: 'Données requises pour récupérer les chapitres',
                    content: new \ArrayObject([
                        'application/json' => [
                            'schema' => [
                                'type' => 'object',
                                'properties' => [
                                    'mangaId' => [
                                        'type' => 'string',
                                        // 'format' => 'uuid',
                                        'description' => 'L\'identifiant unique du manga',
                                        // 'example' => '123e4567-e89b-12d3-a456-426614174000'
                                    ],
                                ],
                                'required' => ['mangaId'],
                            ],
                        ],
                    ]),
                    required: true
                ),
                responses: [
                    '202' => [
                        'description' => 'Demande de récupération acceptée et mise en file d\'attente',
                    ],
                    '422' => [
                        'description' => 'Données de validation invalides',
                    ],
                ]
            )
        ),
    ]
)]
class FetchMangaChaptersResource
{
    public function __construct(
        #[Assert\NotBlank(message: 'L\'identifiant du manga est obligatoire')]
        // #[Assert\Uuid(message: 'L\'identifiant du manga doit être un UUID valide')]
        public string $mangaId,
    ) {
    }
}
