using System;
using System.Collections.Generic;
using System.Text;

/***********每种菜的数据库访问层***********************
 * 这个接口是设计成对每种菜的操作,即对数据库Item的操作
 * 包括常规的数据库对表的增加,删除,修改,查询操作
 * 设计者:魏莹
 * 设计时间:2008年5月20日
 * 修订者:王枢昊
 * 修定时间:2008年5月25日
 * 修定时间:2008年6月25日
 *****************************************************/
namespace IDDal
{
    /// <summary>
    /// 对每种菜的数据操作类
    /// </summary>
    /// <typeparam name="T">T代表Model.Item类</typeparam>
    public interface ItemDal<T>
    {
        /// <summary>
        /// 增加一种菜的方法
        /// </summary>
        /// <param name="item">要增加的这种菜的对象</param>
        /// <returns>影响数据库记录数</returns>
        int AddItem(T item);

        /// <summary>
        /// 删除一种菜的方法
        /// </summary>
        /// <param name="item">要删除的这种菜的对象</param>
        /// <returns>影响数据库记录数</returns>
        int DeleteItem(T item);

        /// <summary>
        /// 修改一种菜的方法
        /// </summary>
        /// <param name="item">要修改的这种菜的对象</param>
        /// <returns>影响数据库记录数</returns>
        int EditItem(T item);

        /// <summary>
        /// 修改一种菜的所属种类的方法
        /// </summary>
        /// <param name="item">要修改的这种菜的对象</param>
        /// <returns>影响数据库记录数</returns>
        int EditItemType(T item);

        /// <summary>
        /// 查询和输入菜名类似的菜的列表对象方法
        /// </summary>
        /// <param name="itemName">菜的名字</param>
        /// <returns>集合类型</returns>
        IList<T> SelectItem(string itemName);

        /// <summary>
        /// 随机读取前N个菜肴
        /// </summary>
        /// <param name="top">读取前几个</param>
        /// <returns></returns>
        IList<T> SelectItemTop(int top);

        /// <summary>
        /// 根据条件查询菜信息方法
        /// </summary>
        /// <param name="itemName">菜名</param>
        /// <param name="price">菜的价格</param>
        /// <param name="type">菜的所属种类</param>
        /// <returns>集合类型</returns>
        IList<T> SelectItem(string itemName, float price, int type);

        /// <summary>
        /// 根据条件查询菜信息方法
        /// </summary>
        /// <param name="itemName">菜名</param>
        /// <param name="price">菜的价格</param>
        /// <returns>集合类型</returns>
        IList<T> SelectItem(string itemName, float price);

        /// <summary>
        /// 根据条件查询菜信息方法
        /// </summary>
        /// <param name="type">菜的所属种类</param>
        /// <returns>集合类型</returns>
        IList<T> SelectItem(int type);

        /// <summary>
        /// 根据条件查询菜信息方法
        /// </summary>
        /// <param name="type">菜的所属种类</param>
        /// <param name="top">列出前几个</param>
        /// <returns>集合类型</returns>
        IList<T> SelectItem(int type,int top);

        /// <summary>
        /// 条件最新加入的菜肴方法
        /// </summary>
        /// <returns>集合类型</returns>
        IList<T> SelectNewItemByIndex();

        /// <summary>
        /// 根据菜肴ID获取每种菜的详细信息方法
        /// </summary>
        /// <param name="systemId">菜肴的ID</param>
        /// <returns>菜肴的对象</returns>
        T SelectOneItem(long systemId);

        /// <summary>
        /// 查询出热门菜肴
        /// </summary>
        /// <returns></returns>
        IList<T> SelectHotItems();
    }
}
