using Sony.Filtr.Applications; using Sony.Filtr.Contracts.Entities; using Sony.Filtr.Core; using Sony.Filtr.Globalization; using System.Globalization; using System.Linq; using Sony.Filtr.AdminAPI.Modules; using Sony.Filtr.Contracts.Entities.Genre; using Sony.Filtr.Core.Genres; namespace Sony.Filtr.AdminAPI.BusinessLogic { public class ApplicationsLogic { private readonly ApplicationInstanceManager _applicationInstanceManager; private readonly GenreManager _genreManager; private readonly GlobalizationHandler _globalizationHandler; public ApplicationsLogic(ApplicationInstanceManager applicationInstanceManager, GenreManager genreManager, GlobalizationHandler globalizationHandler) { _applicationInstanceManager = applicationInstanceManager; _genreManager = genreManager; _globalizationHandler = globalizationHandler; } public Application SaveApplication(ApplicationViewModel applicationViewModel) { Application application; bool adding = false; if (applicationViewModel.Id.HasValue && applicationViewModel.Id.Value != default(int)) { application = _applicationInstanceManager.GetApplication(applicationViewModel.Id.Value); } else { application = new Application(); adding = true; } application.Name = applicationViewModel.Name; application.CultureInfo = new CultureInfo(applicationViewModel.CultureInfo); application.SpotifyRegionCode = applicationViewModel.SpotifyRegionCode.ToLowerInvariant(); application.GACountryName = applicationViewModel.GACountryName; application.Active = applicationViewModel.Active; application.WorkoutMarket = applicationViewModel.WorkoutMarket; application.IncludeOtherPlaylists = applicationViewModel.IncludeOtherPlaylists; application.Services = applicationViewModel.Services; application.DefaultService = applicationViewModel.DefaultService; application = _applicationInstanceManager.SaveApplication(application); if (adding) { CopyTags(application); CopyLanguage(application); } return application; } private void CopyLanguage(Application application) { var fallbackApp = _applicationInstanceManager.GetFallbackApplication(); var langCode = application.CultureInfo.TwoLetterISOLanguageName; if (langCode == fallbackApp.CultureInfo.TwoLetterISOLanguageName) return; var existingTranslations = _globalizationHandler.GetTranslations(application.CultureInfo); if (existingTranslations.Any(t => !string.IsNullOrEmpty(t.Value))) return; var allTranslations = _globalizationHandler.GetTranslations(fallbackApp); foreach (var allTranslation in allTranslations) { _globalizationHandler.SetTranslation(allTranslation.Key, application, allTranslation.Value); } } private void CopyTags(Application application) { var existing = _genreManager.GetGenres(application); if (existing.Any()) return; var global = _applicationInstanceManager.GetFallbackApplication(); var globalGenres = _genreManager.GetGenres(global); foreach (var globalGenre in globalGenres) { Genre genre = new Genre(); genre.Name = globalGenre.Name; genre.ApplicationID = application.ID; genre.GenreCategoryID = globalGenre.GenreCategoryID; genre.LastFMTag = globalGenre.LastFMTag; genre.Active = globalGenre.Active; _genreManager.SaveGenre(genre); } } } }