Public MustInherit Class AffliateCatalogClient
  Inherits GenericClient

#Region "Populate catalog functions"

  ''' <summary>
  ''' Returns an Object of type ICatalog which has Bundles and ServivcePlans.
  ''' If a user is Returning User(cookie information is in Database) populates Cart also.
  ''' </summary>
  ''' <returns>An object of type Icatalog which has Bundles and Service plans</returns>
  ''' <remarks> </remarks>
  Public MustOverride Function GetCatalog(ByVal trackingID As String) As ICatalog

  Public MustOverride Function GetChooseOptionsXml(ByVal trackingID As String) As String

  Public MustOverride Function GetShowPriceList(ByVal trackingID As String) As List(Of String)

#End Region

#Region "Cart related functions"

  ''' <summary>
  '''  Adds Bundles and Service Plans to the shopping cart.
  ''' </summary>
  ''' <param name="itemID"> ID of BUndle/ Service Plan that should be added to cart</param>
  ''' <remarks> </remarks>
  Public MustOverride Function AddCartItem(ByVal trackingID As String, ByVal itemID As String) As INotification

  ''' <summary>
  ''' Adds a Feature to Shopping Cart.
  ''' </summary>
  ''' <param name="itemID">ID of feature that should be added to cart.</param>
  ''' <remarks> </remarks>
  Public MustOverride Function AddSubCartItemWithParent(ByVal trackingID As String, ByVal itemID As String, ByVal parentid As String) As INotification

  ''' <summary>
  ''' Adds a Number Type Feature to Shopping Cart.
  ''' </summary>
  ''' <param name="itemID">ID of feature that should be added to cart.</param>
  ''' <remarks> </remarks>
  Public MustOverride Function AddSubCartItem(ByVal trackingID As String, ByVal itemID As String, ByVal Quantity As Integer) As INotification

  ''' <summary>
  ''' Adds a Number Type Feature to Shopping Cart.
  ''' </summary>
  ''' <param name="itemID">ID of feature that should be added to cart.</param>
  ''' <remarks> </remarks>
  Public MustOverride Function AddSubCartItem(ByVal trackingID As String, ByVal itemID As String, ByVal TextEntry As String) As INotification

  ''' <summary>
  ''' this method provides functionality to remove Bundle / Service Plan / Promotion from the shopping cart.
  ''' </summary>
  ''' <param name="itemID">ID of BUndle/ Service Plan that should be removed from cart</param>
  ''' <remarks> </remarks>
  Public MustOverride Function RemoveCartItem(ByVal trackingID As String, ByVal itemID As String) As INotification

  ''' <summary>
  ''' 
  ''' </summary>
  ''' <param name="itemID">ID of feature that should be removed from cart</param>
  ''' <remarks></remarks>
  Public MustOverride Function RemoveSubCartItem(ByVal trackingID As String, ByVal itemID As String, ByVal parentid As String) As INotification

  ''' <summary>
  ''' Undo a Previous Remove.
  ''' </summary>
  ''' <remarks>
  ''' Adds the last added item from stack to Shopping Cart by using AddCartItem.
  ''' Updates UnDoRemove Flag based on Stack count.
  ''' </remarks>
  ''' 
  Public MustOverride Function UndoRemove(ByVal trackingID As String) As INotification

#End Region

End Class
