<?php

namespace App\Providers;

use App\Contracts\AdCopyGenerator;
use App\Contracts\CompetitorAdProvider;
use App\Contracts\CreativeBriefResolver;
use App\Contracts\ImageCreativeGenerator;
use App\Contracts\ScriptGenerator;
use App\Contracts\VideoAvatarProvider;
use App\Contracts\VoiceSynthesizer;
use App\Services\AI\LaravelAiAdCopyGenerator;
use App\Services\AI\LaravelAiCreativeBriefResolver;
use App\Services\AI\LaravelAiImageGenerator;
use App\Services\AI\LaravelAiScriptGenerator;
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(VoiceSynthesizer::class, LaravelAiVoiceSynthesizer::class);
        $this->app->bind(AdCopyGenerator::class, LaravelAiAdCopyGenerator::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')));
    }
}
