public PackageReminderSchedule ToAPIPackageReminderSchedule()
		{
			if (api != null)
			{
				return api;
			}
			else
			{
				PackageReminderSchedule result = new PackageReminderSchedule();
				if (sdk.PackageId != null)
				{
					result.PackageId = sdk.PackageId.Id;
				}
				else
				{
					result.PackageId = "";
				}

				result.StartInDaysDelay = sdk.DaysUntilFirstReminder;
				result.IntervalInDays = sdk.DaysBetweenReminders;
				result.RepetitionsCount = sdk.NumberOfRepetitions;

				foreach ( Reminder sdkReminder in sdk.Reminders )
				{
					result.Reminders.Add(new ReminderConverter(sdkReminder).ToAPIPackageReminder());
				}
				return result;
			}
		}
 public PackageReminderSchedule SetReminderScheduleForPackage( PackageReminderSchedule apiPayload )
 {
     try {
         string response = restClient.Post(Path(apiPayload.PackageId), JsonConvert.SerializeObject (apiPayload, settings));
         PackageReminderSchedule apiResponse = JsonConvert.DeserializeObject<PackageReminderSchedule> (response, settings );
         return apiResponse;
     }
     catch (EslServerException e) {
         throw new EslServerException ("Failed to set reminder schedule for package with id: " + apiPayload.PackageId + ". Exception: " + e.Message, e.ServerError, e);
     }
     catch (Exception e) {
         throw new EslException ("Failed to set reminder schedule for package with id: " + apiPayload.PackageId + ". Exception: " + e.Message, e);
     }
 }
		public void ToSDKWithNoIDAndNoReminders()
		{
			PackageReminderSchedule api = new PackageReminderSchedule();
			api.RepetitionsCount = 5;
			api.IntervalInDays = 10;
			api.StartInDaysDelay = 15;
			ReminderSchedule sdk = new ReminderScheduleConverter(api).ToSDKReminderSchedule();

			Assert.IsNotNull(sdk);
			Assert.IsNull(sdk.PackageId);
			Assert.AreEqual(5, sdk.NumberOfRepetitions);
			Assert.AreEqual(10, sdk.DaysBetweenReminders);
			Assert.AreEqual(15, sdk.DaysUntilFirstReminder);
			Assert.IsNotNull(sdk.Reminders);
			Assert.IsEmpty(sdk.Reminders);
		}
		public ReminderScheduleConverter( ReminderSchedule sdk )
		{
			this.api = null;
			this.sdk = sdk;
		}
		public ReminderScheduleConverter( PackageReminderSchedule api )
        {
			this.api = api;
			this.sdk = null;
        }
		public void ToSDK()
		{
			PackageReminderSchedule api = new PackageReminderSchedule();
			api.PackageId = "bob";
			api.RepetitionsCount = 5;
			api.IntervalInDays = 10;
			api.StartInDaysDelay = 15;

			PackageReminder reminder1 = new PackageReminder();
			reminder1.Date = reminder1.SentDate = DateTime.Now;
			api.Reminders.Add(reminder1);
			PackageReminder reminder2 = new PackageReminder();
			reminder2.Date = reminder2.SentDate = DateTime.Now.AddDays(1);
			api.Reminders.Add(reminder2);
			PackageReminder reminder3 = new PackageReminder();
			reminder3.Date = reminder3.SentDate = DateTime.Now.AddDays(2);
			api.Reminders.Add(reminder3);

			ReminderSchedule sdk = new ReminderScheduleConverter(api).ToSDKReminderSchedule();

			Assert.IsNotNull(sdk);
			Assert.IsNotNull(sdk.PackageId);
			Assert.AreEqual("bob",sdk.PackageId.Id);
			Assert.AreEqual(5, sdk.NumberOfRepetitions);
			Assert.AreEqual(10, sdk.DaysBetweenReminders);
			Assert.AreEqual(15, sdk.DaysUntilFirstReminder);
			Assert.IsNotNull(sdk.Reminders);
			Assert.AreEqual(3, sdk.Reminders.Count);

			foreach (PackageReminder packageReminder in api.Reminders)
			{
				Reminder sdkReminder = null;

				foreach (Reminder reminder in sdk.Reminders)
				{
					if (packageReminder.Date.Equals(reminder.Date) && packageReminder.SentDate.Equals(reminder.SentDate))
					{
						sdkReminder = reminder;
					}
				}

				Assert.IsNotNull(sdkReminder);
			}
		}