<?php

namespace App\Tests\Feature\Manga;

use App\Entity\Manga;
use App\Tests\Feature\AbstractApiTestCase;
use Zenstruck\Foundry\Test\ResetDatabase;

class GetMangaTest extends AbstractApiTestCase
{
    use ResetDatabase;

    public function testGetNonExistentManga(): void
    {
        // When
        $client = static::createClient();
        $response = $client->request('GET', '/api/mangas/by-id/999');

        // Then
        $this->assertResponseStatusCodeSame(404);
    }

    public function testGetExistingManga(): void
    {
        // Given
        $manga = new Manga();
        $manga->setTitle('One Piece')
            ->setSlug('one-piece')
            ->setDescription('Test description')
            ->setAuthor('Eiichiro Oda')
            ->setPublicationYear(1997)
            ->setGenres(['action', 'adventure'])
            ->setStatus('ongoing')
            ->setExternalId('external-123')
            ->setImageUrl('http://example.com/image.jpg')
            ->setThumbnailUrl('http://example.com/thumbnail.jpg')
            ->setRating(4.5)
            ->setMonitored(true);

        $entityManager = static::getContainer()->get('doctrine')->getManager();
        $entityManager->persist($manga);
        $entityManager->flush();

        // When
        $client = static::createClient();
        $response = $client->request('GET', '/api/mangas/by-id/' . $manga->getId());

        // Then
        $this->assertResponseIsSuccessful();
        $this->assertJsonContains([
            'id' => (string) $manga->getId(),
            'title' => 'One Piece',
            'slug' => 'one-piece',
            'description' => 'Test description',
            'author' => 'Eiichiro Oda',
            'publicationYear' => 1997,
            'genres' => ['action', 'adventure'],
            'status' => 'ongoing',
            'externalId' => 'external-123',
            'imageUrl' => 'http://example.com/image.jpg',
            'rating' => 4.5
        ]);
    }
}