using Nop.Core.Domain.Catalog;
using Nop.Core.Domain.TopicSideMenu;
using Nop.Web.Areas.Admin.Models.Catalog;
using Nop.Web.Areas.Admin.Models.TopicSideMenu;

namespace Nop.Web.Areas.Admin.Factories
{
    /// <summary>
    /// Represents the category model factory
    /// </summary>
    public partial interface ITopicSideMenuB2CModelFactory
    {
        /// <summary>
        /// Prepare category search model
        /// </summary>
        /// <param name="searchModel">Category search model</param>
        /// <returns>Category search model</returns>
        TopicSideMenuSearchModel PrepareTopicSideMenuSearchModel(TopicSideMenuSearchModel searchModel);

        /// <summary>
        /// Prepare paged category list model
        /// </summary>
        /// <param name="searchModel">Category search model</param>
        /// <returns>Category list model</returns>
        TopicSideMenuListModel PrepareTopicSideMenuListModel(TopicSideMenuSearchModel searchModel);

        /// <summary>
        /// Prepare category model
        /// </summary>
        /// <param name="model">Category model</param>
        /// <param name="category">Category</param>
        /// <param name="excludeProperties">Whether to exclude populating of some properties of model</param>
        /// <returns>Category model</returns>
        TopicSideMenuModel PrepareTopicSideMenuModel(TopicSideMenuModel model, TopicSideMenu category, bool excludeProperties = false);

        ///// <summary>
        ///// Prepare paged category product list model
        ///// </summary>
        ///// <param name="searchModel">Category product search model</param>
        ///// <param name="category">Category</param>
        ///// <returns>Category product list model</returns>
        //CategoryProductListModel PrepareCategoryProductListModel(CategoryProductSearchModel searchModel, Category category);

        ///// <summary>
        ///// Prepare product search model to add to the category
        ///// </summary>
        ///// <param name="searchModel">Product search model to add to the category</param>
        ///// <returns>Product search model to add to the category</returns>
        //AddProductToCategorySearchModel PrepareAddProductToCategorySearchModel(AddProductToCategorySearchModel searchModel);

        ///// <summary>
        ///// Prepare paged product list model to add to the category
        ///// </summary>
        ///// <param name="searchModel">Product search model to add to the category</param>
        ///// <returns>Product list model to add to the category</returns>
        //AddProductToCategoryListModel PrepareAddProductToCategoryListModel(AddProductToCategorySearchModel searchModel);
    }
}