// Decompiled with JetBrains decompiler
// Type: ZuneUI.ShellMessagingNotifier
// Assembly: ZuneShell, Version=4.7.0.0, Culture=neutral, PublicKeyToken=ddd0da4d3e678217
// MVID: FC8028F3-A47B-4FB4-B35B-11D1752D8264
// Assembly location: C:\Program Files\Zune\ZuneShell.dll

using Microsoft.Iris;
using Microsoft.Win32;
using Microsoft.Zune.Configuration;
using Microsoft.Zune.Messaging;
using System.Collections;

namespace ZuneUI
{
    public class ShellMessagingNotifier : ModelItem
    {
        private static ShellMessagingNotifier _instance;
        private MessagingNotifier _messagingNotifier;
        private int _newDeviceCartItemsCount;
        private int _newDeviceMessageCount;
        private IList _liveMessageItems;

        public static ShellMessagingNotifier Instance
        {
            get
            {
                if (_instance == null)
                    _instance = new ShellMessagingNotifier();
                return _instance;
            }
        }

        public static bool HasInstance => _instance != null;

        private ShellMessagingNotifier()
        {
            this._messagingNotifier = new MessagingNotifier();
            this._messagingNotifier.OnDeviceCartItemsPosted += new DeviceItemsPostedHandler(this.OnDeviceCartItemsPostedAsync);
            this._messagingNotifier.OnDeviceMessagesPosted += new DeviceItemsPostedHandler(this.OnDeviceMessagesPostedAsync);
        }

        protected override void OnDispose(bool disposing)
        {
            if (disposing)
            {
                this._messagingNotifier.OnDeviceMessagesPosted -= new DeviceItemsPostedHandler(this.OnDeviceMessagesPostedAsync);
                this._messagingNotifier.OnDeviceCartItemsPosted -= new DeviceItemsPostedHandler(this.OnDeviceCartItemsPostedAsync);
                this._messagingNotifier.Dispose();
                this._messagingNotifier = null;
            }
            base.OnDispose(disposing);
        }

        public int NewDeviceCartItemsCount => this._newDeviceCartItemsCount;

        public int NewDeviceMessageCount => this._newDeviceMessageCount;

        private void OnDeviceCartItemsPostedAsync(int iNewDeviceCartItems) => Application.DeferredInvoke(new DeferredInvokeHandler(this.OnDeviceCartItemsPosted), iNewDeviceCartItems);

        private void OnDeviceMessagesPostedAsync(int iNewDeviceMessages) => Application.DeferredInvoke(new DeferredInvokeHandler(this.OnDeviceMessagesPosted), iNewDeviceMessages);

        private void OnDeviceCartItemsPosted(object args)
        {
            this._newDeviceCartItemsCount = (int)args;
            this.FirePropertyChanged("NewDeviceCartItemsCount");
        }

        private void OnDeviceMessagesPosted(object args)
        {
            this._newDeviceMessageCount = (int)args;
            this.FirePropertyChanged("NewDeviceMessageCount");
        }

        public static int PersistedCartItemsCount
        {
            get => ClientConfiguration.Service.GetIntProperty(string.Format("{0}", ClientConfiguration.Service.LastSignedInUserGuid), 0);
            set => ClientConfiguration.Service.SetIntProperty(string.Format("{0}", ClientConfiguration.Service.LastSignedInUserGuid), value);
        }

        public static int CartItemsToUploadCount => new MessagingUserGuidConfiguration(RegistryHive.CurrentUser, ClientConfiguration.Messaging.ConfigurationPath, string.Format("{0}", ClientConfiguration.Service.LastSignedInUserGuid)).CartItemsToUploadCount;

        public IList LiveMessageItems
        {
            get => this._liveMessageItems;
            set
            {
                if (this._liveMessageItems == value)
                    return;
                this._liveMessageItems = value;
                this.FirePropertyChanged(nameof(LiveMessageItems));
            }
        }
    }
}
