<?php

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

use ApiPlatform\Metadata\ApiProperty;

readonly class TestScraperConfigurationResource
{
    public function __construct(
        #[ApiProperty(
            description: 'Indique si le test de configuration a réussi',
            example: true,
            schema: ['type' => 'boolean']
        )]
        public bool $success,
        #[ApiProperty(
            description: 'Liste des URLs d\'images trouvées lors du scraping. Vide en cas d\'échec.',
            example: [
                'https://mangasite.example.com/images/chapter1/page1.jpg',
                'https://mangasite.example.com/images/chapter1/page2.jpg'
            ],
            schema: [
                'type' => 'array',
                'items' => [
                    'type' => 'string',
                    'format' => 'uri'
                ]
            ]
        )]
        public array $imageUrls,
        #[ApiProperty(
            description: 'Nombre total d\'images trouvées',
            example: 2,
            schema: ['type' => 'integer', 'minimum' => 0]
        )]
        public int $totalImages,
        #[ApiProperty(
            description: 'URL qui a été testée',
            example: 'https://mangasite.example.com/manga/one-piece/chapter/1',
            schema: ['type' => 'string', 'format' => 'uri']
        )]
        public string $testedUrl,
        #[ApiProperty(
            description: 'Type de scraping qui a été utilisé pour le test',
            example: 'html',
            schema: ['type' => 'string', 'enum' => ['html', 'javascript']]
        )]
        public string $scrapingType,
        #[ApiProperty(
            description: 'Liste des erreurs détaillées en cas d\'échec. Vide en cas de succès. Chaque erreur contient un type, le champ concerné, un message et une suggestion.',
            example: [
                [
                    'type' => 'selector_error',
                    'field' => 'imageSelector',
                    'message' => 'Le sélecteur d\'image ne trouve aucun élément',
                    'suggestion' => 'Vérifiez le sélecteur CSS'
                ]
            ],
            schema: [
                'type' => 'array',
                'items' => [
                    'type' => 'object',
                    'properties' => [
                        'type' => [
                            'type' => 'string',
                            'enum' => ['selector_error', 'url_error', 'general_error'],
                            'description' => 'Type d\'erreur rencontrée'
                        ],
                        'field' => [
                            'type' => 'string',
                            'description' => 'Champ de configuration concerné par l\'erreur'
                        ],
                        'message' => [
                            'type' => 'string',
                            'description' => 'Message d\'erreur détaillé'
                        ],
                        'suggestion' => [
                            'type' => 'string',
                            'description' => 'Suggestion pour corriger l\'erreur'
                        ]
                    ],
                    'required' => ['type', 'field', 'message', 'suggestion']
                ]
            ]
        )]
        public array $errors = [],
    ) {
    }
}
