using System.Collections.Generic;
using Nop.Core;
using Nop.Core.Domain.Catalog;
using Nop.Core.Domain.TopicSideMenu;

namespace Nop.Services.TopicSideMenuService
{
    /// <summary>
    /// Category service interface
    /// </summary>
    public partial interface ITopicSideMenuB2CService
    {
        /// <summary>
        /// Delete category
        /// </summary>
        /// <param name="category">Category</param>
        void DeleteTopicSideMenu(TopicSideMenu TopicSideMenu);

        /// <summary>
        /// Gets all categories
        /// </summary>
        /// <param name="storeId">Store identifier; 0 if you want to get all records</param>
        /// <param name="showHidden">A value indicating whether to show hidden records</param>
        /// <param name="loadCacheableCopy">A value indicating whether to load a copy that could be cached (workaround until Entity Framework supports 2-level caching)</param>
        /// <returns>Categories</returns>
        IList<TopicSideMenu> GetAllTopicSideMenu(int storeId = 0, bool showHidden = false, bool loadCacheableCopy = true);

        /// <summary>
        /// Gets all categories
        /// </summary>
        /// <param name="categoryName">Category name</param>
        /// <param name="storeId">Store identifier; 0 if you want to get all records</param>
        /// <param name="pageIndex">Page index</param>
        /// <param name="pageSize">Page size</param>
        /// <param name="showHidden">A value indicating whether to show hidden records</param>
        /// <returns>Categories</returns>
        IPagedList<TopicSideMenu> GetAllTopicSideMenu(string categoryName, int storeId = 0,
            int pageIndex = 0, int pageSize = int.MaxValue, bool showHidden = false);

        /// <summary>
        /// Gets a category
        /// </summary>
        /// <param name="categoryId">Category identifier</param>
        /// <returns>Category</returns>
        TopicSideMenu GetTopicSideMenuById(int TopicSideMenuId);

        /// <summary>
        /// Inserts category
        /// </summary>
        /// <param name="category">Category</param>
        void InsertTopicSideMenu(TopicSideMenu SideMneu);

        /// <summary>
        /// Updates the category
        /// </summary>
        /// <param name="category">Category</param>
        void UpdateTopicSideMenu(TopicSideMenu TopicSideMenu);


        void UpdateTopicSideMenuMapping(TopicSideMenuMapping TopicSideMenu);

        void InsertTopicSideMenuMapping(TopicSideMenuMapping TopicSideMenu);

        TopicSideMenuMapping GetTopicSideMenuMappingByTopicId(int TopicId);

    }
}