<?php

namespace App\Providers;

use App\Contracts\AdCopyGenerator;
use App\Contracts\CatalogPageDataResolver;
use App\Contracts\CompetitorAdProvider;
use App\Contracts\CreativeBriefResolver;
use App\Contracts\CreativeTitleGenerator;
use App\Contracts\ImageCreativeGenerator;
use App\Contracts\LandingPageBriefResolver;
use App\Contracts\LandingPageHtmlGenerator;
use App\Contracts\ScriptGenerator;
use App\Contracts\StyleSuggester;
use App\Contracts\VideoAvatarProvider;
use App\Contracts\VoiceSynthesizer;
use App\Services\AI\LaravelAiAdCopyGenerator;
use App\Services\AI\LaravelAiCatalogPageDataResolver;
use App\Services\AI\LaravelAiCreativeBriefResolver;
use App\Services\AI\LaravelAiCreativeTitleGenerator;
use App\Services\AI\LaravelAiImageGenerator;
use App\Services\AI\LaravelAiLandingPageBriefResolver;
use App\Services\AI\LaravelAiLandingPageHtmlGenerator;
use App\Services\AI\LaravelAiScriptGenerator;
use App\Services\AI\LaravelAiStyleSuggester;
use App\Services\AI\LaravelAiVoiceSynthesizer;
use Illuminate\Support\ServiceProvider;

class CreativeServiceProvider extends ServiceProvider
{
    public function register(): void
    {
        $this->app->bind(CreativeBriefResolver::class, LaravelAiCreativeBriefResolver::class);
        $this->app->bind(ImageCreativeGenerator::class, LaravelAiImageGenerator::class);
        $this->app->bind(ScriptGenerator::class, LaravelAiScriptGenerator::class);
        $this->app->bind(StyleSuggester::class, LaravelAiStyleSuggester::class);
        $this->app->bind(VoiceSynthesizer::class, LaravelAiVoiceSynthesizer::class);
        $this->app->bind(AdCopyGenerator::class, LaravelAiAdCopyGenerator::class);
        $this->app->bind(CreativeTitleGenerator::class, LaravelAiCreativeTitleGenerator::class);
        $this->app->bind(LandingPageBriefResolver::class, LaravelAiLandingPageBriefResolver::class);
        $this->app->bind(LandingPageHtmlGenerator::class, LaravelAiLandingPageHtmlGenerator::class);
        $this->app->bind(CatalogPageDataResolver::class, LaravelAiCatalogPageDataResolver::class);

        $this->app->bind(VideoAvatarProvider::class, fn ($app) => $app->make(config('creative.video_provider')));
        $this->app->bind(CompetitorAdProvider::class, fn ($app) => $app->make(config('creative.competitor_ad_provider')));
    }
}
