<commit_before>using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
using XOMNI.SDK.Public.Clients;
using XOMNI.SDK.Public.Models;
using XOMNI.SDK.Public.Models.Catalog;
using XOMNI.SDK.Public.Models.PII;

namespace XOMNI.SDK.Public.Clients.PII
{
	public class WishlistClient : BaseClient
	{
		public WishlistClient(HttpClient httpClient)
			: base(httpClient)
		{

		}

        public async Task DeleteAsync()
        {
            string path = "/pii/wishlists";
            await Client.DeleteAsync(path).ConfigureAwait(false);
        }

        public async Task DeleteAsync(Guid wishlistUniqueKey)
		{
			string path = string.Format("/pii/wishlist?wishlistUniqueKey={0}", wishlistUniqueKey);
            await Client.DeleteAsync(path).ConfigureAwait(false);
		}

        public async Task<ApiResponse<WishlistWithItems>> GetAsync(Guid wishlistUniqueKey, int longitude, int latitude, bool includeItemStaticProperties, bool includeItemDynamicProperties, bool includeCategoryMetadata, AssetDetailType imageAssetDetail, AssetDetailType videoAssetDetail, AssetDetailType documentAssetDetail, string metadataKey, string metadataValue)
		{
            string path = string.Format("/pii/wishlist?wishlistUniqueKey={0}&longitude={1}&latitude={2}&includeItemStaticProperties={3}&includeItemDynamicProperties={4}&includeCategoryMetadata={5}&imageAssetDetail={6}&videoAssetDetail={7}&documentAssetDetail={8}&metadataKey={9}&metadataValue={10}", wishlistUniqueKey, longitude, latitude, includeItemStaticProperties, includeItemDynamicProperties, includeCategoryMetadata, imageAssetDetail, videoAssetDetail, documentAssetDetail, metadataKey, metadataValue);

			using (var response = await Client.GetAsync(path).ConfigureAwait(false))
			{
                return await response.Content.ReadAsAsync<ApiResponse<WishlistWithItems>>().ConfigureAwait(false);
			}
		}

        public async Task PostAccessAsync(Guid wishlistUniqueKey, bool isPublic)
        {
            string path = string.Format("/pii/wishlistaccess?wishlistUniqueKey={0}&isPublic={1}", wishlistUniqueKey, isPublic);
            await Client.PostAsJsonAsync(path, string.Empty).ConfigureAwait(false);
        }

        public async Task<ApiResponse<List<Guid>>> GetAsync()
		{
			string path = "/pii/wishlists";

			using (var response = await Client.GetAsync(path).ConfigureAwait(false))
			{
                return await response.Content.ReadAsAsync<ApiResponse<List<Guid>>>().ConfigureAwait(false);
			}
		}

        public async Task<ApiResponse<Wishlist>> PostWishlistAsync(Wishlist wishlist)
		{
			string path = "/pii/wishlist";

            using (var response = await Client.PostAsJsonAsync(path, wishlist).ConfigureAwait(false))
			{
                return await response.Content.ReadAsAsync<ApiResponse<Wishlist>>().ConfigureAwait(false);
			}
		}

        public async Task<ApiResponse<Wishlist>> PutAsync(Wishlist wishlist)
		{
			string path = "/pii/wishlist";

			using (var response = await Client.PutAsJsonAsync(path, wishlist).ConfigureAwait(false))
			{
                return await response.Content.ReadAsAsync<ApiResponse<Wishlist>>().ConfigureAwait(false);
			}
		}

        public async Task PostMailAsync(MailSendRequest mailSendRequest)
		{
			string path = "/pii/wishlist/mail";
            await Client.PostAsJsonAsync(path, mailSendRequest).ConfigureAwait(false);
		}
	}
}<commit_msg>Validation added. Parameters made optional.<commit_after>using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
using XOMNI.SDK.Public.Clients;
using XOMNI.SDK.Public.Models;
using XOMNI.SDK.Public.Models.Catalog;
using XOMNI.SDK.Public.Models.PII;
using XOMNI.SDK.Public.Extensions;

namespace XOMNI.SDK.Public.Clients.PII
{
	public class WishlistClient : BaseClient
	{
		public WishlistClient(HttpClient httpClient)
			: base(httpClient)
		{

		}

        public async Task DeleteAsync()
        {
            ValidatePIIToken();

            string path = "/pii/wishlists";
            await Client.DeleteAsync(path).ConfigureAwait(false);
        }

        public async Task DeleteAsync(Guid wishlistUniqueKey)
		{
            ValidatePIIToken();

			string path = string.Format("/pii/wishlist?wishlistUniqueKey={0}", wishlistUniqueKey);
            await Client.DeleteAsync(path).ConfigureAwait(false);
		}

        public async Task<ApiResponse<WishlistWithItems>> GetAsync(Guid wishlistUniqueKey, Location location = null, bool includeItemStaticProperties = true, bool includeItemDynamicProperties = false, bool includeCategoryMetadata = false, AssetDetailType imageAssetDetail = AssetDetailType.None, AssetDetailType videoAssetDetail = AssetDetailType.None, AssetDetailType documentAssetDetail = AssetDetailType.None, string metadataKey = null, string metadataValue = null)
        {
            ValidatePIIToken();
            string path = string.Format("/pii/wishlist?wishlistUniqueKey={0}&", wishlistUniqueKey);

            if (location != null)
            {
                Validator.For(location.Longitude, "Longitude").InRange(-180, 180);
                Validator.For(location.Latitude, "Latitude").InRange(-90, 90);
                path += string.Format("longitude={0}&latitude={1}&", location.Longitude, location.Latitude);
            }
            path += string.Format("includeItemStaticProperties={0}&includeItemDynamicProperties={1}&includeCategoryMetadata={2}&imageAssetDetail={3}&videoAssetDetail={4}&documentAssetDetail={5}", includeItemStaticProperties, includeItemDynamicProperties, includeCategoryMetadata, (int)imageAssetDetail, (int)videoAssetDetail, (int)documentAssetDetail);

            if (!string.IsNullOrEmpty(metadataKey) && !string.IsNullOrEmpty(metadataValue))
            {
                path += string.Format("&metadataKey={0}&metadataValue={1}", metadataKey, metadataValue);
            }
            else if (!string.IsNullOrEmpty(metadataKey) || !string.IsNullOrEmpty(metadataValue))
            {
                Validator.For(metadataKey, "metadataKey").IsNotNullOrEmpty();
                Validator.For(metadataValue, "metadataValue").IsNotNullOrEmpty();
            }

            using (var response = await Client.GetAsync(path).ConfigureAwait(false))
            {
                return await response.Content.ReadAsAsync<ApiResponse<WishlistWithItems>>().ConfigureAwait(false);
            }
        }

        public async Task PostAccessAsync(Guid wishlistUniqueKey, bool isPublic)
        {
            ValidatePIIToken();
            string path = string.Format("/pii/wishlistaccess?wishlistUniqueKey={0}&isPublic={1}", wishlistUniqueKey, isPublic);
            await Client.PostAsJsonAsync(path, string.Empty).ConfigureAwait(false);
        }

        public async Task<ApiResponse<List<Guid>>> GetAsync()
		{
            ValidatePIIToken();
			string path = "/pii/wishlists";

			using (var response = await Client.GetAsync(path).ConfigureAwait(false))
			{
                return await response.Content.ReadAsAsync<ApiResponse<List<Guid>>>().ConfigureAwait(false);
			}
		}

        public async Task<ApiResponse<Wishlist>> PostWishlistAsync(Wishlist wishlist)
		{
            ValidatePIIToken();
            Validator.For(wishlist, "wishlist").IsNotNull();

            if (wishlist.LastSeenLocation != null)
            {
                Validator.For(wishlist.LastSeenLocation.Latitude, "Latitude").InRange(-90, 90);
                Validator.For(wishlist.LastSeenLocation.Longitude, "Longitude").InRange(-180, 180);
            }

			string path = "/pii/wishlist";

            using (var response = await Client.PostAsJsonAsync(path, wishlist).ConfigureAwait(false))
			{
                return await response.Content.ReadAsAsync<ApiResponse<Wishlist>>().ConfigureAwait(false);
			}
		}

        public async Task<ApiResponse<Wishlist>> PutAsync(Wishlist wishlist)
		{
            ValidatePIIToken();
            Validator.For(wishlist, "wishlist").IsNotNull();

            if (wishlist.LastSeenLocation != null)
            {
                Validator.For(wishlist.LastSeenLocation.Latitude, "Latitude").InRange(-90, 90);
                Validator.For(wishlist.LastSeenLocation.Longitude, "Longitude").InRange(-180, 180);
            }

			string path = "/pii/wishlist";

			using (var response = await Client.PutAsJsonAsync(path, wishlist).ConfigureAwait(false))
			{
                return await response.Content.ReadAsAsync<ApiResponse<Wishlist>>().ConfigureAwait(false);
			}
		}

        public async Task PostMailAsync(MailSendRequest mailSendRequest)
		{
            ValidatePIIToken();
            Validator.For(mailSendRequest, "mailSendRequest").IsNotNull();

			string path = "/pii/wishlist/mail";
            await Client.PostAsJsonAsync(path, mailSendRequest).ConfigureAwait(false);
		}
	}
}
{'fraction_non_alphanumeric': 0.11070903539522786, 'fraction_numerical': 0.006671943910437635, 'mean_word_length': 3.5030549898167007, 'pattern_counts': {'":': 0, '<': 39, '<?xml version=': 0, '>': 39, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5213724', 'n_tokens_mistral': 2645, 'n_tokens_neox': 2449, 'n_words': 407}