Public MustInherit Class CatalogClient
  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


  ''' <summary>
  ''' Returns a Dictionary with key as ID and all available features.
  ''' </summary>
  ''' <returns>Retrns the list of Features </returns>
  ''' <remarks> </remarks>
  Public MustOverride Function GetFeatures(ByVal trackingID As String) As Dictionary(Of String, ISubCartItem)

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

  Public MustOverride Function GetBuildYourOwnXml(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>
  ''' Stores Shopping Cart Information in Charter.com database, with cookie id.
  ''' </summary>
  ''' <remarks> </remarks>
  Public MustOverride Sub PersistShoppingcart(ByVal trackingID As String)

  ''' <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

  ''' <summary>
  ''' Adds a choice to Option of a ServicePlan in the Shopping Cart.
  ''' </summary>
  ''' <param name="itemID">Id of the Choice to be Added.</param>
  ''' <param name="Quantity">Number of above feature to be added.</param>
  ''' <remarks></remarks>
  Public MustOverride Sub AddOption(ByVal trackingID As String, ByVal itemID As String, Optional ByVal Quantity As Integer = Nothing)

  ''' <summary>
  ''' Removes a choice from Option of a ServicePlan in the Shopping Cart.
  ''' </summary>
  ''' <param name="itemID">Id of the Choice to be Removed.</param>
  ''' <remarks></remarks>
  Public MustOverride Sub RemoveOption(ByVal trackingID As String, ByVal itemID As String)

#End Region

End Class
