<?php

namespace Tests\Unit\Services;

use App\Services\AI\GeminiVeoVertexVideoProvider;
use App\Services\AI\GeminiVeoVideoAvatarProvider;
use App\Services\AI\OpenAiSoraVideoAvatarProvider;
use App\Services\AI\VideoAvatarProviderFactory;
use Tests\TestCase;

class VideoAvatarProviderFactoryTest extends TestCase
{
    public function test_it_routes_short_durations_to_veo(): void
    {
        $provider = app(VideoAvatarProviderFactory::class)->forDuration(8);

        $this->assertInstanceOf(GeminiVeoVideoAvatarProvider::class, $provider);
    }

    public function test_it_routes_vertex_extension_durations_to_vertex(): void
    {
        config(['creative.vertex_extend_durations' => [15 => 1, 30 => 3]]);

        $provider = app(VideoAvatarProviderFactory::class)->forDuration(15);

        $this->assertInstanceOf(GeminiVeoVertexVideoProvider::class, $provider);

        $provider = app(VideoAvatarProviderFactory::class)->forDuration(30);

        $this->assertInstanceOf(GeminiVeoVertexVideoProvider::class, $provider);
    }

    public function test_it_rejects_retired_sora_duration_even_if_legacy_config_is_present(): void
    {
        config(['creative.video_provider_long' => OpenAiSoraVideoAvatarProvider::class]);

        $factory = app(VideoAvatarProviderFactory::class);

        $this->assertFalse($factory->supportsDuration(12));
        $this->expectException(\InvalidArgumentException::class);
        $this->expectExceptionMessage('12s is no longer supported');

        $factory->forDuration(12);
    }

    public function test_it_accepts_short_veo_durations(): void
    {
        $factory = app(VideoAvatarProviderFactory::class);

        foreach ([4, 6, 8] as $duration) {
            $this->assertTrue($factory->supportsDuration($duration));
            $this->assertInstanceOf(GeminiVeoVideoAvatarProvider::class, $factory->forDuration($duration));
        }
    }
}
