/// <summary>
        /// Calls the Xero API.
        /// </summary>
        /// <param name="consumerRequest">The consumer request.</param>
        /// <param name="accessTokenRepository">The access token repository.</param>
        /// <returns></returns>
        private Response CallXeroApiInternal(IConsumerRequest consumerRequest, ITokenRepository <AccessToken> accessTokenRepository)
        {
            AccessToken accessToken = accessTokenRepository.GetToken("");

            if (accessToken == null)
            {
                return(new Response {
                    Status = "NotConnected"
                });
            }

            if (accessToken.HasExpired())
            {
                accessToken = RenewAccessToken(accessTokenRepository);
            }

            if (accessToken.HasExpired())
            {
                return(new Response {
                    Status = "AccessTokenExpired"
                });
            }

            // At this point, we should have a valid a
            consumerRequest.SignWithToken(accessToken);

            HttpWebResponse webResponse;

            try
            {
                webResponse = consumerRequest.ToWebResponse();
            }
            catch (WebException ex)
            {
                if (ex.Response is HttpWebResponse)
                {
                    HttpWebResponse httpWebResponse = (HttpWebResponse)ex.Response;

                    if (httpWebResponse.StatusCode == HttpStatusCode.NotFound)
                    {
                        return(new Response {
                            Status = "NotFound"
                        });
                    }
                }

                return(new Response {
                    Status = "Web Exception: " + ex.Message
                });
            }
            catch (OAuthException ex)
            {
                return(new Response {
                    Status = "OAuth Exception: " + ex.Report
                });
            }
            catch (Exception ex)
            {
                return(new Response {
                    Status = "Exception: " + ex.Message
                });
            }

            return(ModelSerializer.DeSerializer <Response>(webResponse.GetResponseStream().ReadToEnd()));
        }