internal ServiceBase(EsendexCredentials credentials)
        {
            var httpRequestHelper  = new HttpRequestHelper();
            var httpResponseHelper = new HttpResponseHelper();

            var httpClient = new HttpClient(credentials, Constants.API_URI, httpRequestHelper, httpResponseHelper);

            Serialiser = new XmlSerialiser();
            RestClient = new RestClient(httpClient);
        }
        public OperationResult Post(GenerateSantaResource generate)
        {
            var contacts = _provider.Get<Contact>();
            var restrictions = _provider.Get<Restriction>();

            bool finished = false;

            while (!finished)
            {
                try
                {
                    var result = _generator.GenerateSantaList(contacts.ToList(), restrictions.ToList());
                    finished = true;

                    var appDir = AppDomain.CurrentDomain.BaseDirectory;
                    var appDataDir = "App_Data";

                    var stamp = DateTime.UtcNow.Ticks;

                    var filenameEncoded = string.Format("encoded_{0}_at_{1}.txt",result.Id,  stamp);
                    var filenameDecoded = string.Format("decoded_{0}_at_{1}.txt", result.Id, stamp);

                    var encodedFile = Path.Combine(appDir,appDataDir, filenameEncoded);
                    var decodedFile = Path.Combine(appDir, appDataDir, filenameDecoded);

                    SaveDecodedResultTo(decodedFile, result);
                    SaveEncodedResultTo(encodedFile, result);

                    if (generate.SendRealMessages)
                    {
                        var creds = new EsendexCredentials(generate.Username, generate.Password);
                        var messagingService = new MessagingService(true, creds);

                        var texter = new Texter(messagingService);
                        texter.SendMessagesToSantas(result.SantaEntries, generate.Template, generate.Originator,
                                                    generate.Account);
                    }

                    return new OperationResult.SeeOther { RedirectLocation = typeof(SantaList).CreateUri() };
                }
                catch(Exception ex)
                {
                    Console.WriteLine("Error creating, trying again...{0}", ex);
                }
            }
            return new OperationResult.InternalServerError();
        }