namespace CoreConnect.Commerce.Customer;
/// Represents an interface for managing wishlists.
public interface IWishlistService
/// Changes the name of a wishlist based on the provided <paramref name="request"/>.
/// <param name="request">The request containing the new wishlist name.</param>
/// <param name="cancellationToken">A cancellation token to cancel the operation if necessary.</param>
/// <returns>A <see cref="Task"/> representing the asynchronous operation, returning the updated <see cref="Wishlist"/>.</returns>
Task<Wishlist> ChangeWishlistName(ChangeWishListNameRequest request, CancellationToken cancellationToken);
/// Creates a new wishlist based on the provided <paramref name="request"/>.
/// <param name="request">The request containing the details of the new wishlist.</param>
/// <param name="cancellationToken">A cancellation token to cancel the operation if necessary.</param>
/// <returns>A <see cref="Task"/> representing the asynchronous operation, returning the newly created <see cref="Wishlist"/>.</returns>
Task<Wishlist> CreateWishlist(WishlistRequest request, CancellationToken cancellationToken);
/// Deletes a wishlist based on its <paramref name="shoppingListId"/>.
/// <param name="shoppingListId">The identifier of the wishlist to delete.</param>
/// <param name="cancellationToken">A cancellation token to cancel the operation if necessary.</param>
/// <returns>A <see cref="Task"/> representing the asynchronous operation, returning a <see cref="bool"/> indicating whether the deletion was successful.</returns>
Task<bool> DeleteWishlist(string shoppingListId, CancellationToken cancellationToken);
/// Retrieves a wishlist based on the provided <paramref name="request"/>.
/// <param name="request">The request containing the criteria for wishlist retrieval.</param>
/// <param name="cancellationToken">A cancellation token to cancel the operation if necessary.</param>
/// <returns>A <see cref="Task"/> representing the asynchronous operation, returning the retrieved <see cref="Wishlist"/> or <c>null</c> if not found.</returns>
Task<Wishlist?> GetWishlist(GetWishListRequest? request, CancellationToken cancellationToken);
/// Removes a line item from a wishlist based on the provided <paramref name="request"/>.
/// <param name="request">The request containing the item to remove from the wishlist.</param>
/// <param name="cancellationToken">A cancellation token to cancel the operation if necessary.</param>
/// <returns>A <see cref="Task"/> representing the asynchronous operation, returning the updated <see cref="Wishlist"/>.</returns>
Task<Wishlist> RemoveWishlistLineItem(RemoveWishlistLineItemRequest request, CancellationToken cancellationToken);
/// Adds a line item to a wishlist based on the provided <paramref name="request"/>.
/// <param name="request">The request containing the item to add to the wishlist.</param>
/// <param name="cancellationToken">A cancellation token to cancel the operation if necessary.</param>
/// <returns>A <see cref="Task"/> representing the asynchronous operation, returning the updated <see cref="Wishlist"/>.</returns>
Task<Wishlist> AddWishlistLineItem(AddWishlistLineItemRequest request, CancellationToken cancellationToken);
Task<Wishlist> GetMergeWishlist(CancellationToken cancellationToken);
Task<Wishlist> GetWishListByGroupId(string? wishListGroupId, CancellationToken cancellationToken);
Task<Wishlist> GetOldWishList(CancellationToken cancellationToken);
Task AddWishlistLineItem(string wishlistId, int variantId, int productId, CancellationToken cancellationToken);
Task RemoveWishlistLineItem(string wishlistId, string lineItemId, CancellationToken cancellationToken);