public EmailSubscriptionsOperationStatus GetEmailSubscriptions()
        {
            var operationStatus=new EmailSubscriptionsOperationStatus();
            try
            {
                ContactOperationStatus contactOperationStatus = _contactService.GetContact();
                if (!contactOperationStatus.Status)
                {
                    //TODO: what is required here?
                    /**
                    returnContact = new EmailNewsletterContact();
                    returnContact.Status = false;
                    returnContact.Message = "No user currently logged in";
                    **/
                    return
                        (EmailSubscriptionsOperationStatus)
                        new EmailSubscriptionsOperationStatus().InjectFrom(contactOperationStatus);
                }
                Contact contact = contactOperationStatus.Contact;
                operationStatus = _emailSubscriptionConnector.GetSubscriptions(contact.Email);

            }
            catch (Exception e)
            {
                operationStatus = OperationStatusExceptionHelper<EmailSubscriptionsOperationStatus>
                    .CreateFromException("An error has occurred while retrieving the email subscriptions", e);

            }
            return operationStatus;
        }
        public EmailSubscriptionsOperationStatus GetSubscriptions(string email)
        {
            var operationStatus = new EmailSubscriptionsOperationStatus();
            try
            {

                MCApi api = new MCApi(_apiKey, false);
                var subscriptions = new EmailSubscriptions();
                subscriptions.Email = email;
                var testResults = api.ListMemberInfo(_listId, email);
                if (testResults.Success.Value == 1)
                {
                    var merges = testResults.Data[0].Merges;

                    foreach (var merge in merges)
                    {
                        if (merge.Key == "GROUPINGS")
                        {
                            var grouping = (List.Grouping[]) merge.Value;
                            if (grouping.Count() > 0)
                                subscriptions.Subscriptions = grouping[0].Groups.ToList();
                            operationStatus.Status = true;
                            operationStatus.SubscriptionStatus = true;
                        }
                        if (merge.Key == "FNAME")
                        {
                            subscriptions.ForeName = merge.Value.ToString();
                        }
                        if (merge.Key == "LNAME")
                        {
                            subscriptions.LastName = merge.Value.ToString();
                        }
                    }
                    operationStatus.SubscriptionStatus = true;
                }
                else
                {
                    operationStatus.SubscriptionStatus = false;
                    operationStatus.Message = testResults.ErrorsData[0].ToString();
                }
                operationStatus.Status = true;
                operationStatus.EmailSubscriptions = subscriptions;
            }
            catch (Exception e)
            {
                operationStatus = OperationStatusExceptionHelper<EmailSubscriptionsOperationStatus>
                    .CreateFromException("An error has occurred while retrieving the email subscriptions", e);

            }
            return operationStatus;
        }
        public EmailSubscriptionsOperationStatus GetEmailSubscriptions(string email)
        {
            var operationStatus=new EmailSubscriptionsOperationStatus();
            try
            {
                operationStatus = _emailSubscriptionConnector.GetSubscriptions(email);
            }
            catch (Exception e)
            {
                operationStatus = OperationStatusExceptionHelper<EmailSubscriptionsOperationStatus>
                    .CreateFromException("An error has occurred while retrieving the email subscriptions", e);

            }
            return operationStatus;
        }
        public EmailSubscriptionsOperationStatus SynchroniseSubscriptions(EmailSubscriptions subscriptions)
        {
            var operationStatus = new EmailSubscriptionsOperationStatus();
            try
            {
                MCApi api = new MCApi(_apiKey, false);
                var subscribeOptions =
                    new Opt<List.SubscribeOptions>(
                        new List.SubscribeOptions
                        {
                            SendWelcome = true,
                            UpdateExisting = true,
                            DoubleOptIn = (subscriptions.Subscriptions.Count() != 0),
                            //retain double optin for new subscribers
                            ReplaceInterests = true
                        });

                var groupings = new List<List.Grouping>()
                {
                    new List.Grouping("Signed Up As", subscriptions.Subscriptions.ToArray()),
                };

                var merges =
                    new Opt<List.Merges>(
                        new List.Merges
                        {
                            {"FNAME", subscriptions.ForeName},
                            {"LNAME", subscriptions.LastName},
                            {"GROUPINGS", groupings}
                        });

                operationStatus.Status = api.ListSubscribe(_listId, subscriptions.Email, merges, subscribeOptions);
                operationStatus.SubscriptionStatus = true;
            }
            catch (Exception e)
            {
                operationStatus = OperationStatusExceptionHelper<EmailSubscriptionsOperationStatus>
                    .CreateFromException("An error has occurred while syncing the email subscriptions", e);
                operationStatus.SubscriptionStatus = false;

            }
            return operationStatus;
        }
        public EmailSubscriptionsOperationStatus SynchroniseSubscriptions(EmailSubscriptions subscriptions)
        {
            var operationStatus=new EmailSubscriptionsOperationStatus();
            try
            {
                operationStatus = _emailSubscriptionConnector.SynchroniseSubscriptions(subscriptions);
                if (operationStatus.Status)
                    operationStatus.Message = "Your subscriptions have been updated successfully.";
            }
            catch (Exception e)
            {
                operationStatus = OperationStatusExceptionHelper<EmailSubscriptionsOperationStatus>
                    .CreateFromException("An error has occurred while retrieving the email subscriptions", e);

            }
            return operationStatus;
        }