<?php

namespace Tests\Unit\Services\Keywords;

use App\Services\Keywords\AiKeywordSeedBuilder;
use App\Services\Keywords\CatalogKeywordSeedResolver;
use App\Services\Keywords\KeywordSeedBuilder;
use App\Services\Keywords\ProductKeywordParser;
use Laravel\Ai\StructuredAnonymousAgent;
use Tests\TestCase;

class CatalogKeywordSeedResolverTest extends TestCase
{
    public function test_it_prioritizes_user_keywords_before_ai_and_heuristic_seeds(): void
    {
        config([
            'google-ads.max_seeds' => 6,
            'google-ads.ai_seed_generation' => true,
        ]);

        StructuredAnonymousAgent::fake([
            ['products' => [[
                'index' => 1,
                'seeds' => ['womens faux leather jacket', 'moto jacket'],
            ]]],
        ]);

        $candidates = [[
            'name' => 'Classic Biker Style Jacket',
            'url' => 'https://www.marshalls.com/us/store/jump/product/jacket/1',
            'product_keywords' => [
                'primary' => 'womens biker jacket',
                'related' => ['faux leather jacket'],
            ],
        ]];

        $resolution = (new CatalogKeywordSeedResolver(
            new KeywordSeedBuilder,
            new AiKeywordSeedBuilder(new ProductKeywordParser),
            new ProductKeywordParser,
        ))->resolve('Marshalls', 'Women', 'Jackets', $candidates);

        $this->assertSame('womens biker jacket', $resolution['user_seeds'][0]);
        $this->assertNotEmpty($resolution['ai_seeds']);
        $this->assertSame('womens biker jacket', $resolution['seeds'][0]);
        $this->assertLessThanOrEqual(6, count($resolution['seeds']));
        $this->assertSame(['womens biker jacket', 'faux leather jacket'], $resolution['product_seeds'][0]['user']);
        $this->assertSame(['womens faux leather jacket', 'moto jacket'], $resolution['product_seeds'][0]['ai']);
        $this->assertNotEmpty($resolution['product_seeds'][0]['heuristic']);
    }
}
