//using System; //using System.Collections.Concurrent; //using System.Collections.Generic; //using System.IO; //using System.Linq; //using System.Text; //using System.Threading.Tasks; //using MoreLinq; //using Sony.Filtr.Buzz; //using Sony.Filtr.Contracts.Definitions; //using Sony.Filtr.Core.SonyMusic; //using Sony.Filtr.Core.SpotifyBrowse; //using Sony.Filtr.Core.SpotifyRegion; //using Sony.Filtr.Playlists.Spotify; //using Sony.Filtr.Playlists.Spotify.Model; //using Sony.Filtr.SpotifyWebAPI.Model; //using Sony.Filtr.Utility.Extensions; //using Sony.Filtr.Core.EditorialPlaylists; //namespace Sony.Filtr.Worker.Onetime //{ // public class ExportSonyPercentages // { // private readonly SpotifyPlaylistManager _spotifyPlaylistManager; // private readonly SpotifyBrowseManager _spotifyBrowseManager; // private readonly SonyMusicManager _sonyMusicManager; // private readonly SpotifyRegionManager _spotifyRegionManager; // private readonly BuzzAccountManager _buzzAccountManager; // private readonly EditorialPlaylistManager _editorialPlaylistManager; // public ExportSonyPercentages(SpotifyPlaylistManager spotifyPlaylistManager, SpotifyBrowseManager spotifyBrowseManager, SonyMusicManager sonyMusicManager, SpotifyRegionManager spotifyRegionManager, BuzzAccountManager buzzAccountManager, EditorialPlaylistManager editorialPlaylistManager) // { // _spotifyPlaylistManager = spotifyPlaylistManager; // _spotifyBrowseManager = spotifyBrowseManager; // _sonyMusicManager = sonyMusicManager; // _spotifyRegionManager = spotifyRegionManager; // _buzzAccountManager = buzzAccountManager; // _editorialPlaylistManager = editorialPlaylistManager; // } // public async Task ExecuteAsync() // { // //var browseData = _spotifyBrowseManager.GetSpotifyBrowseData(DateTime.Today); // //var uniquePlaylist = browseData.DistinctBy(p => p.PlaylistUri).ToList(); // //var playlists = _spotifyPlaylistManager.GetPlaylistsForBuzzCategoryId(new BuzzCategory() { ID = (int)StaticBuzzCategory.SonyMusic }); // //var uniquePlaylist = playlists.DistinctBy(p => p.PlaylistUri).ToList(); // var allPlaylists = await _editorialPlaylistManager.GetLightweightEditorialPlaylistsAsync(null, false, false); // var uniquePlaylist = allPlaylists.Where(p => p.BuzzCategoryId == (int)StaticBuzzCategory.SonyMusic).ToList().DistinctBy(p => p.SpotifyLinkUri); // ConcurrentDictionary> playlistTracks = new ConcurrentDictionary>(); // await uniquePlaylist.ForEachAsync(20, async spotifyBrowseItem => // { // var trackList = await _spotifyPlaylistManager.GetTrackListAsync(spotifyBrowseItem.SpotifyLinkUri); // playlistTracks.TryAdd(spotifyBrowseItem.SpotifyLinkUri, trackList); // }); // var allIsrcs = playlistTracks.SelectMany(p => p.Value).Select(p => p.ISRC).FilterNull().Distinct(StringComparer.InvariantCultureIgnoreCase).ToList(); // var allSonyIsrcs = await _sonyMusicManager.GetSonyTrackMarketsAsync(allIsrcs); // var allSonyIsrcsDic = allSonyIsrcs.ToDictionary(k => k.ISRC, v => v); // var regions = await _spotifyRegionManager.GetAvailableRegionsAsync(); // FileInfo file = new FileInfo("Browse-SonyPercentage.csv"); // using(var fileStream = file.OpenWrite()) // { // fileStream.Write(Encoding.UTF8.GetPreamble(), 0, Encoding.UTF8.GetPreamble().Length); // using(var fileWriter = new StreamWriter(fileStream)) // { // fileWriter.WriteLine(string.Join(";", "Uri", "Name", "BuzzCountry", "WorldwideSonyPercentage")); // foreach(var playlist in uniquePlaylist) // { // var tracks = playlistTracks.GetValueOrDefault(playlist.SpotifyLinkUri); // if (tracks != null && tracks.Any()) // { // var totalTracks = tracks.Count; // List percentages = new List(); // foreach(var region in regions) // { // var sonyTracksInRegion = tracks.Where(p=> p.ISRC != null).Count(track => allSonyIsrcsDic.GetValueOrDefault(track.ISRC)?.Markets.Contains(region) ?? false); // var sonyPercentageInMarket = ((double)sonyTracksInRegion / (double)totalTracks) * 100; // if (sonyPercentageInMarket > 0) // percentages.Add(sonyPercentageInMarket); // } // var worldwideSonyTrackPercentage = 0.0; // if (percentages.Any()) // worldwideSonyTrackPercentage = percentages.Average(); // var buzzUser = await _buzzAccountManager.GetBuzzUserAsync(playlist.SpotifyLink.ExtractSpotifyPlaylistUserName(), ServiceType.Spotify); // await fileWriter.WriteLineAsync($"{playlist.SpotifyLinkUri};{playlist.Name};{buzzUser?.CountryCode};{worldwideSonyTrackPercentage}"); // } // else // { // Console.WriteLine($"No tracks for playlist: {playlist.SpotifyLinkUri}"); // } // } // } // } // } // } //}