using EllieBot.Modules.Searches.GoogleScrape; using EllieBot.Modules.Searches.Youtube; namespace EllieBot.Modules.Searches; public sealed class DefaultSearchServiceFactory : ISearchServiceFactory, IEService { private readonly SearchesConfigService _scs; private readonly SearxSearchService _sss; private readonly YtDlpSearchService _ytdlp; private readonly GoogleSearchService _gss; private readonly YoutubeDataApiSearchService _ytdata; private readonly InvidiousYtSearchService _iYtSs; private readonly GoogleScrapeService _gscs; public DefaultSearchServiceFactory( SearchesConfigService scs, GoogleSearchService gss, GoogleScrapeService gscs, SearxSearchService sss, YtDlpSearchService ytdlp, YoutubeDataApiSearchService ytdata, InvidiousYtSearchService iYtSs) { _scs = scs; _sss = sss; _ytdlp = ytdlp; _gss = gss; _gscs = gscs; _iYtSs = iYtSs; _ytdata = ytdata; } public ISearchService GetSearchService(string? hint = null) => _scs.Data.WebSearchEngine switch { WebSearchEngine.Google => _gss, WebSearchEngine.Google_Scrape => _gscs, WebSearchEngine.Searx => _sss, _ => _gss }; public ISearchService GetImageSearchService(string? hint = null) => _scs.Data.ImgSearchEngine switch { ImgSearchEngine.Google => _gss, ImgSearchEngine.Searx => _sss, _ => _gss }; public IYoutubeSearchService GetYoutubeSearchService(string? hint = null) => _scs.Data.YtProvider switch { YoutubeSearcher.YtDataApiv3 => _ytdata, YoutubeSearcher.Invidious => _iYtSs, YoutubeSearcher.Ytdlp => _ytdlp, _ => throw new ArgumentOutOfRangeException() }; }