using Microsoft.Extensions.Logging;

using Selector.Model;

namespace Selector.Events
{
    public class UserEventBus: IEventBus
    {
        private readonly ILogger<UserEventBus> Logger;

        public event EventHandler<ApplicationUser> UserChange;
        public event EventHandler<SpotifyLinkChange> SpotifyLinkChange;
        public event EventHandler<LastfmChange> LastfmCredChange;

        public event EventHandler<CurrentlyPlayingDTO> CurrentlyPlaying;

        public UserEventBus(ILogger<UserEventBus> logger)
        {
            Logger = logger;
        }

        public void OnUserChange(object sender, ApplicationUser args)
        {
            Logger.LogTrace("Firing user event [{usernamne}]", args?.UserName);
            UserChange?.Invoke(sender, args);
        }

        public void OnSpotifyLinkChange(object sender, SpotifyLinkChange args)
        {
            Logger.LogTrace("Firing user Spotify event [{usernamne}]", args?.UserId);
            SpotifyLinkChange?.Invoke(sender, args);
        }

        public void OnLastfmCredChange(object sender, LastfmChange args)
        {
            Logger.LogTrace("Firing user Last.fm event [{usernamne}]", args?.UserId);
            LastfmCredChange?.Invoke(sender, args);
        }

        public void OnCurrentlyPlayingChange(object sender, CurrentlyPlayingDTO args)
        {
            Logger.LogTrace("Firing currently playing event [{usernamne}/{userId}]", args?.Username, args.UserId);
            CurrentlyPlaying?.Invoke(sender, args);
        }
    }
}