using System.Collections.Generic;
using System.Linq;

namespace BLL
{
    public class StarLevelService
    {
        public static Model.CNPCDB db = Funs.DB;

        /// <summary>
        /// 根据主键获取五星级别
        /// </summary>
        /// <param name="starLevelId"></param>
        /// <returns></returns>
        public static Model.Base_StarLevel GetStarLevelById(string starLevelId)
        {
            return Funs.DB.Base_StarLevel.FirstOrDefault(e => e.StarLevelId == starLevelId);
        }

        /// <summary>
        ///  根据id获取名称
        /// </summary>
        /// <param name="starLevelId"></param>
        /// <returns></returns>
        public static string GetStarStarMarkById(string starLevelId)
        {
            string name = string.Empty;
            var getS = GetStarLevelById(starLevelId);
            if (getS != null)
            {
                name = getS.StarMark;
            }
            return name;
        }
        public static int GetStarLevelValueById(string starLevelId)
        {
            int value = 2;
            var getS = GetStarLevelById(starLevelId);
            if (getS != null)
            {
                value = getS.LevelValue ?? 2;
            }
            return value;
        }

        /// <summary>
        ///  根据星值获取ID
        /// </summary>
        /// <param name="starLevelId"></param>
        /// <returns></returns>
        public static string GetStarLevelIdByValue(int value)
        {
            string id = string.Empty;
            var getS = Funs.DB.Base_StarLevel.FirstOrDefault(e => e.LevelValue == value);
            if (getS != null)
            {
                id = getS.StarLevelId;
            }
            return id;
        }


        /// <summary>
        /// 添加五星级别
        /// </summary>
        /// <param name="StarLevel"></param>
        public static void AddStarLevel(Model.Base_StarLevel StarLevel)
        {
            using (Model.CNPCDB db = new Model.CNPCDB(Funs.ConnString))
            {
                Model.Base_StarLevel newStarLevel = new Model.Base_StarLevel
                {
                    StarLevelId = StarLevel.StarLevelId,
                    StarName = StarLevel.StarName,
                    LevelValue = StarLevel.LevelValue,
                    StarMark = StarLevel.StarMark,
                    Remark = StarLevel.Remark,
                    Cycle = StarLevel.Cycle,
                };
                db.Base_StarLevel.InsertOnSubmit(newStarLevel);
                db.SubmitChanges();
            }
        }

        /// <summary>
        /// 修改五星级别
        /// </summary>
        /// <param name="StarLevel"></param>
        public static void UpdateStarLevel(Model.Base_StarLevel StarLevel)
        {
            using (Model.CNPCDB db = new Model.CNPCDB(Funs.ConnString))
            {
                Model.Base_StarLevel newStarLevel = db.Base_StarLevel.FirstOrDefault(e => e.StarLevelId == StarLevel.StarLevelId);
                if (newStarLevel != null)
                {
                    newStarLevel.StarName = StarLevel.StarName;
                    newStarLevel.LevelValue = StarLevel.LevelValue;
                    newStarLevel.StarMark = StarLevel.StarMark;
                    newStarLevel.Remark = StarLevel.Remark;
                    newStarLevel.Cycle = StarLevel.Cycle;
                    db.SubmitChanges();
                }
            }
        }

        /// <summary>
        /// 根据主键删除五星级别
        /// </summary>
        /// <param name="starLevelId"></param>
        public static void DeleteStarLevelById(string starLevelId)
        {
            using (Model.CNPCDB db = new Model.CNPCDB(Funs.ConnString))
            {
                Model.Base_StarLevel StarLevel = db.Base_StarLevel.FirstOrDefault(e => e.StarLevelId == starLevelId);
                if (StarLevel != null)
                {
                    DeleteStarLevelItemById(starLevelId);
                    db.Base_StarLevel.DeleteOnSubmit(StarLevel);
                    db.SubmitChanges();
                }
            }
        }

        /// <summary>
        /// 获取五星级别列表
        /// </summary>
        /// <returns></returns>
        public static List<Model.Base_StarLevel> GetStarLevelList()
        {
            return (from x in Funs.DB.Base_StarLevel orderby x.LevelValue select x).ToList();
        }

        #region 表下拉框
        /// <summary>
        ///  表下拉框
        /// </summary>
        /// <param name="dropName">下拉框名字</param>
        /// <param name="isShowPlease">是否显示请选择</param>
        public static void InitStarLevelDropDownList(FineUIPro.DropDownList dropName, bool isShowPlease)
        {
            dropName.DataValueField = "StarLevelId";
            dropName.DataTextField = "StarName";
            dropName.DataSource = BLL.StarLevelService.GetStarLevelList();
            dropName.DataBind();
            if (isShowPlease)
            {
                Funs.FineUIPleaseSelect(dropName);
            }
        }

        public static void InitStarMarkDropDownList(FineUIPro.DropDownList dropName, bool isShowPlease)
        {
            dropName.DataValueField = "StarLevelId";
            dropName.DataTextField = "StarMark";
            dropName.DataSource = BLL.StarLevelService.GetStarLevelList();
            dropName.DataBind();
            if (isShowPlease)
            {
                Funs.FineUIPleaseSelect(dropName);
            }
        }
        #endregion

        #region 五星级别明细表
        /// <summary>
        /// 根据主键获取五星级别明细
        /// </summary>
        /// <param name="StarLevelItemId"></param>
        /// <returns></returns>
        public static Model.Base_StarLevelItem GetStarLevelItemById(string StarLevelItemId)
        {
            return Funs.DB.Base_StarLevelItem.FirstOrDefault(e => e.StarLevelItemId == StarLevelItemId);
        }

        public static List<Model.Base_StarLevelItem> GetStarLevelItemListByStarLevelId(string StarLevelId)
        {
            var getList = from x in Funs.DB.Base_StarLevelItem
                          where x.StarLevelId == StarLevelId
                          orderby x.ExamType
                          select x;
            return getList.ToList();
        }

        /// <summary>
        /// 添加五星级别明细
        /// </summary>
        /// <param name="item"></param>
        public static void AddStarLevelItem(Model.Base_StarLevelItem item)
        {
            using (Model.CNPCDB db = new Model.CNPCDB(Funs.ConnString))
            {
                Model.Base_StarLevelItem newStarLevel = new Model.Base_StarLevelItem
                {
                    StarLevelItemId = item.StarLevelItemId,
                    StarLevelId = item.StarLevelId,
                    ExamType = item.ExamType,
                    Frequency = item.Frequency,
                };
                db.Base_StarLevelItem.InsertOnSubmit(newStarLevel);
                db.SubmitChanges();
            }
        }

        /// <summary>
        /// 修改五星级别明细
        /// </summary>
        /// <param name="item"></param>
        public static void UpdateStarLevelItem(Model.Base_StarLevelItem item)
        {
            using (Model.CNPCDB db = new Model.CNPCDB(Funs.ConnString))
            {
                Model.Base_StarLevelItem newStarLevel = db.Base_StarLevelItem.FirstOrDefault(e => e.StarLevelItemId == item.StarLevelItemId);
                if (newStarLevel != null)
                {
                    newStarLevel.ExamType = item.ExamType;
                    newStarLevel.Frequency = item.Frequency;
                    db.SubmitChanges();
                }
            }
        }

        /// <summary>
        /// 根据主键删除五星级别明细
        /// </summary>
        /// <param name="StarLevelItemId"></param>
        public static void DeleteStarLevelItemById(string StarLevelId)
        {
            using (Model.CNPCDB db = new Model.CNPCDB(Funs.ConnString))
            {
                var getDeleteItem = db.Base_StarLevelItem.Where(e => e.StarLevelId == StarLevelId);
                if (getDeleteItem.Count() > 0)
                {
                    db.Base_StarLevelItem.DeleteAllOnSubmit(getDeleteItem);
                    db.SubmitChanges();
                }
            }
        }

        /// <summary>
        /// 根据主键删除五星级别明细
        /// </summary>
        /// <param name="StarLevelItemId"></param>
        public static void DeleteStarLevelItemByStarLevelItemId(string StarLevelItemId)
        {
            using (Model.CNPCDB db = new Model.CNPCDB(Funs.ConnString))
            {
                Model.Base_StarLevelItem StarLevel = db.Base_StarLevelItem.FirstOrDefault(e => e.StarLevelItemId == StarLevelItemId);
                if (StarLevel != null)
                {
                    db.Base_StarLevelItem.DeleteOnSubmit(StarLevel);
                    db.SubmitChanges();
                }
            }
        }
        #endregion
    }
}