<?php

namespace App\Providers;

use App\Contracts\FaceSwapDriverInterface;
use App\FilterWord;
use App\Setting;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind(FaceSwapDriverInterface::class, function ($app) {
            $driver = config('faceswap.driver', 'mock');

            return match ($driver) {
                'segmind'   => new \App\Services\FaceSwap\SegmindDriver(),
                'facemint'  => new \App\Services\FaceSwap\FaceMintDriver(),
                'replicate' => new \App\Services\FaceSwap\ReplicateDriver(),
                'wavespeed' => new \App\Services\FaceSwap\WaveSpeedDriver(),
                'kimonopipeline' => new \App\Services\FaceSwap\KimonoPipelineDriver(),
                default     => new \App\Services\FaceSwap\MockDriver(),
            };
        });
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        try {
            Cache::remember('settings', 22*60, function() {
                $settings = Setting::notDeleted()->isActivated()->pluck('content', 'slug');
                config()->set(['settings' => $settings]);
            });
        } catch (\Exception $e) {
            // DB not available (e.g. during build, migrate, package:discover)
        }
    }
}
