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

namespace BLL
{
    public static class Sys_RolePowerService
    {
        /// <summary>
        /// 增加角色权限
        /// </summary>
        /// <param name="power"></param>
        public static void SaveRolePower(Model.Sys_RolePower power)
        {
            //Model.EProjectDB db = Funs.DB;
            string newRolePower = BLL.SQLHelper.GetNewID(typeof(Model.Sys_RolePower));
            Model.Sys_RolePower newPower = new Model.Sys_RolePower();
            newPower.RolePowerId = newRolePower;
            newPower.RoleId = power.RoleId;
            newPower.MenuId = power.MenuId;

            Funs.DB.Sys_RolePower.InsertOnSubmit(newPower);
            Funs.DB.SubmitChanges();
        }

        /// <summary>
        /// 删除权限
        /// </summary>
        /// <param name="postId"></param>
        public static void DeleteRolePower(string roleId)
        {
            //Model.EProjectDB db = Funs.DB;
            var q = from x in Funs.DB.Sys_RolePower
                     join y in Funs.DB.Sys_Menu on x.MenuId equals y.MenuId
                     where x.RoleId == roleId
                     select x;

            if (q.Count() > 0)
            {
                Funs.DB.Sys_RolePower.DeleteAllOnSubmit(q);
            }

            Funs.DB.SubmitChanges();
        }

        /// <summary>
        /// 获取角色权限
        /// </summary>
        /// <param name="roleId"></param>
        public static List<Model.Sys_RolePower> GetRolePower(string roleId)
        {
            List<Model.Sys_RolePower> powerList = Funs.DB.Sys_RolePower.Where(e => e.RoleId == roleId).ToList();
            return powerList;
        }

        /// <summary>
        /// 根据角色Id查询所有系统功能授权信息的数量
        /// </summary>
        /// <param name="roleId">角色Id</param>
        /// <returns>授权的数量</returns>
        public static int GetPostPowerCountByPostId(string roleId)
        {
            var q = (from x in Funs.DB.Sys_RolePower where x.RoleId == roleId select x).ToList();
            return q.Count();
        }

        /// <summary>
        /// 根据角色主键获得角色权限数量
        /// </summary>
        /// <param name="roleId">角色</param>
        /// <returns></returns>
        public static int GetPostPowerCountByRoleId(string roleId)
        {
            var q = (from x in Funs.DB.Sys_RolePower where x.RoleId == roleId select x).ToList();
            return q.Count();
        }

        /// <summary>
        /// 根据角色主键获得对应的菜单权限
        /// </summary>
        /// <param name="roleId">角色主键</param>
        /// <returns>菜单ID数组</returns>
        public static string[] GetMenuIdByRoleId(string roleId)
        {
            var q = Funs.DB.Sys_RolePower.Where(e => e.RoleId == roleId);
            string[] menuId = new string[q.Count()];
            if (q.Count() > 0)
            {
                int i = 0;
                foreach (var menu in q)
                {
                    menuId[i] = menu.MenuId;
                    i++;
                }

                return menuId;
            }
            else
            {
                return null;
            }
        }
    }
}