using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Service;
using Domain;
using WebSite.Models;
using System.Data;

namespace WebSite.Controllers
{
    public class WXController : BaseController
    {
        private const int AuthorityID = 13;
        private static string codes = System.Configuration.ConfigurationManager.AppSettings["code"];
        private static log4net.ILog logger = log4net.LogManager.GetLogger(typeof(WeiXinController));
        public IHostManager HostManager { get; set; }
        public ISysHotelManager SysHotelManager { get; set; }
        public IRoomTypeWXMenusManager RoomTypeWXMenusManager { get; set; }
        public IHostModalManager HostModalManager { get; set; }
        public IRoomTypeSceneManager RoomTypeSceneManager { get; set; }
        public ILightControlManager LightControlManager { get; set; }
        public IHostSceneManager HostSceneManager { get; set; }
        //public IHostAirManager HostAirManager { get; set; }
        //public ITvControlManager TvControlManager { get; set; }
        //public IRoomTypeModalManager RoomTypeModalManager { get; set; }
        //public IRoomServiceManager RoomServiceManager { get; set; }
        //public IAlarmSettingManager AlarmSettingManager { get; set; }
        //public ICurtainControlManager CurtainControlManager { get; set; }
        //public IUnlockControlManager UnlockControlManager { get; set; }
        //public IMusicControlManager MusicControlManager { get; set; }
        //public IAppMenuManager AppMenuManager { get; set; }

        public ActionResult Index(string code, string creatDate, string lang = "zh-cn")
        {
            switch (lang.ToLower())
            {
                case "en":
                    Session["isCN"] = 1;
                    break;
                case "zh-tw":
                    Session["isCN"] = 2;
                    break;
                default:
                    Session["isCN"] = 0;
                    break;
            }
            SysHotel sysHotel = SysHotelManager.GetByCode(code, Convert.ToDateTime(creatDate));
            if (sysHotel == null)
            {
                ViewData["Error"] = HttpContext.InnerLanguage("WXHotelNotFound");//"酒店未知，请联系管理员。";
                return View("Error");
            }
            else
            {
                CurrentHotelID = sysHotel.ID;//缓存当前酒店ID
                return LoginIndex(code, ReturnNameByLanguage(sysHotel.Name, sysHotel.EName, sysHotel.TWName), sysHotel.LogoPath);
            }
        }
        [HttpGet]
        public ActionResult LoginIndex(string hotelCode, string hotelName, string logo)
        {
            if (Request.Cookies["WXRoomNumber"] == null)
            {
                ViewData["RoomNumber"] = "";
            }
            else
            {
                ViewData["RoomNumber"] = Request.Cookies["WXRoomNumber"].Value;
            }
            //if (codes.IndexOf(",") == -1)
            //{
            //    ViewData["HotelCode"] = codes;
            //}
            //else
            //{
            ViewData["HotelCode"] = hotelCode;
            //}
            ViewData["HotelName"] = hotelName;
            ViewData["Logo"] = logo;
            return View("login");
        }
        [HttpPost]
        public ActionResult Login(string code, string roomNumber, string identity)
        {
            try
            {
                var host = HostManager.GetByRoomNumber(roomNumber, CurrentHotelID);
                if (host == null || host.RoomStatus.ID != 2)
                {
                    return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("WXInvalidRoom") });
                }
                else if (!Common.CSRedisCacheHelper.Contains(host.HostNumber, host.MAC))
                {
                    return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("HostOffine") });
                }
                else
                {
                    using (syncstatus.syncstatusSoapClient wsClient = new syncstatus.syncstatusSoapClient())
                    {
                        if (!wsClient.ValidateNumberByCode(code, roomNumber, identity))
                        {
                            return Json(new { IsSuccess = false, Message = "验证码有误。" });
                        }
                    }
                }
                //登录成功，cookie存储当前房号
                Response.Cookies["WXRoomNumber"].Value = roomNumber;
                Response.Cookies["WXRoomNumber"].Expires = DateTime.Now.AddYears(1);
                //获取微信显示的菜单
                IList<WXMenu> WXMenuList = new List<WXMenu>();
                IList<RoomTypeWXMenus> WXMenus = RoomTypeWXMenusManager.LoadAll(host.RoomType.ID).Where(r => r.ActiveIndicator == true).OrderBy(r => r.Sort).ToList();
                if (WXMenus.Count == 0)
                {
                    return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("WXNotSetMenu") });
                }
                foreach (RoomTypeWXMenus menu in WXMenus)
                {
                    WXMenuList.Add(new WXMenu { Code = menu.Code, Name = ReturnNameByLanguage(menu.Name, menu.EName, menu.TWName), TakePower = menu.TakePower });
                }
                Session["WXMenuList"] = WXMenuList;

                return Json(new { IsSuccess = true, Message = HttpContext.InnerLanguage("LoginSuccessful"), Target = "/WX/WXIndex?RoomNumber=" + roomNumber });//" + WXMenuList[0].Code + "
            }
            catch (Exception ex)
            {
                return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("LoginFailed") + "：" + ex.Message });
            }
        }

        public ActionResult WXIndex(string roomNumber)
        {
            var host = HostManager.GetByRoomNumber(roomNumber, CurrentHotelID);
            if (host == null || host.RoomStatus.ID != 2)
            {
                ViewData["Error"] = HttpContext.InnerLanguage("WXInvalidRoom");
                return View("Error");
            }
            ViewData["RoomNumber"] = roomNumber;

            return View("Index");
        }

        public ActionResult WXIndex1(string code, string creatDate, string roomNumber, string identity)
        {
            SysHotel sysHotel = SysHotelManager.GetByCode(code, Convert.ToDateTime(creatDate));
            if (sysHotel == null)
            {
                ViewData["Error"] = HttpContext.InnerLanguage("WXHotelNotFound");//"酒店未知，请联系管理员。";
                return View("Error");
            }
            CurrentHotelID = sysHotel.ID;//缓存当前酒店ID
            var host = HostManager.GetByRoomNumber(roomNumber, CurrentHotelID);
            if (host == null || host.RoomStatus.ID != 2)
            {
                ViewData["Error"] = HttpContext.InnerLanguage("WXInvalidRoom");
                return View("Error");
            }
            else if (!Common.CSRedisCacheHelper.Contains(host.HostNumber, host.MAC))
            {
                ViewData["Error"] = HttpContext.InnerLanguage("HostOffine");
                return View("Error");
            }
            else
            {
                using (syncstatus.syncstatusSoapClient wsClient = new syncstatus.syncstatusSoapClient())
                {
                    if (!wsClient.ValidateNumberByCode(code, roomNumber, identity))
                    {
                        ViewData["Error"] = "验证码有误。";
                        return View("Error");
                    }
                }
            }
            //登录成功，cookie存储当前房号
            Response.Cookies["WXRoomNumber"].Value = roomNumber;
            Response.Cookies["WXRoomNumber"].Expires = DateTime.Now.AddYears(1);
            //获取微信显示的菜单
            IList<WXMenu> WXMenuList = new List<WXMenu>();
            IList<RoomTypeWXMenus> WXMenus = RoomTypeWXMenusManager.LoadAll(host.RoomType.ID).Where(r => r.ActiveIndicator == true).OrderBy(r => r.Sort).ToList();
            if (WXMenus.Count == 0)
            {
                return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("WXNotSetMenu") });
            }
            foreach (RoomTypeWXMenus menu in WXMenus)
            {
                WXMenuList.Add(new WXMenu { Code = menu.Code, Name = ReturnNameByLanguage(menu.Name, menu.EName, menu.TWName), TakePower = menu.TakePower });
            }
            Session["WXMenuList"] = WXMenuList;
            ViewData["RoomNumber"] = roomNumber;

            return View("Index");
        }

        /// <summary>
        /// 获取数据
        /// </summary>
        /// <param name="code"></param>
        /// <returns></returns>
        public ActionResult GetWXData(string roomNumber, string code, bool takePower)
        {
            try
            {
                var host = HostManager.GetByRoomNumber(roomNumber, CurrentHotelID);
                if (host == null || host.RoomStatus.ID != 2)
                {
                    ViewData["Error"] = HttpContext.InnerLanguage("WXInvalidRoom");
                    return View("Error");
                }
                bool isControl = true;
                if (takePower)//如果需要在取电状态才能控制，获取当前取电状态
                {
                    var takePowerModal = HostModalManager.GetByModalAddress(host.ID, "004000001");
                    if (takePowerModal.Status != 1) isControl = false;
                }
                IList<HostModal> hostModals;
                IList<WXHostModal> result = new List<WXHostModal>();
                switch (code)
                {
                    case "mensuo":
                        WXEntity wxEntity = new WXEntity();
                        wxEntity.RoomNumber = roomNumber;
                        wxEntity.HostID = host.ID;
                        wxEntity.WXLockStatus = host.LockStatus;
                        wxEntity.WXLockModalAddress = "";
                        hostModals = HostModalManager.Load(host.ID, DeviceType.WXLock).Where(r => r.Modal.WXActiveIndicator).ToList();
                        if (hostModals.Count > 0)
                        {
                            wxEntity.WXLockModalAddress = hostModals[0].Modal.ModalAddress;
                        }
                        return Json(new { IsSuccess = true, Result = wxEntity, IsControl = isControl }, JsonRequestBehavior.AllowGet);
                    case "changjing":
                        IList<RoomTypeScene> roomTypeScenes = RoomTypeSceneManager.LoadAll().Where(r => r.RoomType.ID == host.RoomType.ID && r.ActiveIndicator).OrderBy(r => r.Sort).ToList();
                        IList<HostScene> hostScene = HostSceneManager.LoadByHostID(host.ID);
                        IList<WXRoomTypeScene> scenseList = new List<WXRoomTypeScene>();
                        foreach (RoomTypeScene scene in roomTypeScenes)
                        {
                            int status = 2;
                            foreach (HostScene hs in hostScene)
                            {
                                if (scene.ID == hs.Scene.ID)
                                {
                                    status = hs.Status;
                                    break;
                                }
                            }
                            WXRoomTypeScene wxScene = new WXRoomTypeScene { ID = scene.ID, HostID = host.ID, Name = ReturnNameByLanguage(scene.Name, scene.EnglishName, scene.TWName), TakeInverse = scene.TakeInverse, Status = status };
                            scenseList.Add(wxScene);
                        }
                        return Json(new { IsSuccess = true, Result = scenseList, IsControl = isControl }, JsonRequestBehavior.AllowGet);
                    case "fuwu":
                        hostModals = HostModalManager.Load(host.ID, DeviceType.ServiceInfo).Where(r => r.Modal.WXActiveIndicator).ToList();
                        foreach (HostModal modal in hostModals)
                        {
                            WXHostModal wxModal = new WXHostModal();
                            wxModal.HostID = modal.HostID;
                            wxModal.Name = ReturnNameByLanguage(modal.Modal.Name, modal.Modal.EnglishName, modal.Modal.TWName);
                            wxModal.ModalAddress = modal.Modal.ModalAddress;
                            wxModal.Status = modal.Status;
                            result.Add(wxModal);
                        }
                        break;
                    case "fangkong":
                        hostModals = HostModalManager.Load(host.ID, DeviceType.Relay).Where(r => r.Modal.WXActiveIndicator).ToList();
                        foreach (HostModal modal in hostModals)
                        {
                            WXHostModal wxModal = new WXHostModal();
                            wxModal.HostID = modal.HostID;
                            wxModal.Name = ReturnNameByLanguage(modal.Modal.Name, modal.Modal.EnglishName, modal.Modal.TWName);
                            wxModal.ModalAddress = modal.Modal.ModalAddress;
                            wxModal.Status = modal.Status;
                            result.Add(wxModal);
                        }
                        break;
                    case "tiaoguang":
                        hostModals = HostModalManager.LoadByHostID(host.ID).Where(r => r.Modal.WXActiveIndicator).ToList();
                        foreach (HostModal modal in hostModals)
                        {
                            WXHostModal wxModal = new WXHostModal();
                            switch (modal.Modal.Type)
                            {
                                case DeviceType.Dimmer:
                                case DeviceType.PWMDimmer:
                                case DeviceType.PWMExpand:
                                case DeviceType.PBLED:
                                case DeviceType.Traic:
                                case DeviceType.LVout://弱电输出
                                case DeviceType.PB20:
                                case DeviceType.PB20_LD:
                                case DeviceType.PB20_LS:
                                    wxModal.HostID = modal.HostID;
                                    wxModal.Name = ReturnNameByLanguage(modal.Modal.Name, modal.Modal.EnglishName, modal.Modal.TWName);
                                    wxModal.ModalAddress = modal.Modal.ModalAddress;
                                    wxModal.Status = modal.Status;
                                    wxModal.Brightness = modal.Brightness;
                                    result.Add(wxModal);
                                    break;
                                case DeviceType.Strip://灯带：过滤000回路
                                    if (modal.Modal.ModalAddress.Substring(6) != "000")
                                    {
                                        wxModal.HostID = modal.HostID;
                                        wxModal.Name = ReturnNameByLanguage(modal.Modal.Name, modal.Modal.EnglishName, modal.Modal.TWName);
                                        wxModal.ModalAddress = modal.Modal.ModalAddress;
                                        wxModal.Status = modal.Status;
                                        wxModal.Brightness = modal.Brightness;
                                        result.Add(wxModal);
                                    }
                                    break;
                            }
                        }
                        break;
                    case "tiaose"://调色，只要000回路打勾就显示
                        hostModals = HostModalManager.Load(host.ID, DeviceType.Strip).Where(r => r.Modal.ActiveIndicator).OrderBy(r => r.Modal.ModalAddress).ToList();
                        foreach (HostModal modal in hostModals)
                        {
                            IList<WXHostModal> curModal = new List<WXHostModal>();
                            switch (modal.Modal.ModalAddress.Substring(6))
                            {
                                case "000":
                                    if (modal.Modal.WXActiveIndicator)
                                    {
                                        WXHostModal wxModal = new WXHostModal();
                                        wxModal.HostID = modal.HostID;
                                        wxModal.Name = ReturnNameByLanguage(modal.Modal.Name, modal.Modal.EnglishName, modal.Modal.TWName);
                                        wxModal.Status = modal.Status;
                                        wxModal.ModalAddress = modal.Modal.ModalAddress;
                                        wxModal.Brightness = modal.Brightness;
                                        result.Add(wxModal);
                                    }
                                    break;
                                case "001":
                                    curModal = result.Where(r => r.ModalAddress.Substring(0, 6) == modal.Modal.ModalAddress.Substring(0, 6)).ToList();
                                    if (curModal.Count > 0)
                                    {
                                        curModal[0].ModalAddress1 = modal.Modal.ModalAddress;
                                        curModal[0].Brightness1 = modal.Brightness;
                                    }
                                    break;
                                case "002":
                                    curModal = result.Where(r => r.ModalAddress.Substring(0, 6) == modal.Modal.ModalAddress.Substring(0, 6)).ToList();
                                    if (curModal.Count > 0)
                                    {
                                        curModal[0].ModalAddress2 = modal.Modal.ModalAddress;
                                        curModal[0].Brightness2 = modal.Brightness;
                                    }
                                    break;
                                case "003":
                                    curModal = result.Where(r => r.ModalAddress.Substring(0, 6) == modal.Modal.ModalAddress.Substring(0, 6)).ToList();
                                    if (curModal.Count > 0)
                                    {
                                        curModal[0].ModalAddress3 = modal.Modal.ModalAddress;
                                        curModal[0].Brightness3 = modal.Brightness;
                                    }
                                    break;
                                case "004":
                                    curModal = result.Where(r => r.ModalAddress.Substring(0, 6) == modal.Modal.ModalAddress.Substring(0, 6)).ToList();
                                    if (curModal.Count > 0)
                                    {
                                        curModal[0].ModalAddress4 = modal.Modal.ModalAddress;
                                        curModal[0].Brightness4 = modal.Brightness;
                                    }
                                    break;
                            }
                        }
                        break;
                    case "kongtiao":
                        hostModals = HostModalManager.Load(host.ID, DeviceType.AirConditioner).Where(r => r.Modal.WXActiveIndicator).ToList();
                        foreach (HostModal modal in hostModals)
                        {
                            WXHostModal wxModal = new WXHostModal();
                            wxModal.HostID = modal.HostID;
                            wxModal.Name = ReturnNameByLanguage(modal.Modal.Name, modal.Modal.EnglishName, modal.Modal.TWName);
                            wxModal.ModalAddress = modal.Modal.ModalAddress;
                            wxModal.Status = modal.Status;
                            wxModal.CurrentTemp = modal.CurrentTemp;
                            wxModal.SettingTemp = modal.SettingTemp < 16 ? 16 : (modal.SettingTemp > 32 ? 32 : modal.SettingTemp);
                            wxModal.FanSpeed = modal.FanSpeed;
                            wxModal.Mode = modal.Mode;
                            wxModal.Valve = modal.Valve;
                            result.Add(wxModal);
                        }
                        break;
                    case "chuanglian":
                        hostModals = HostModalManager.Load(host.ID, DeviceType.Curtain).Where(r => r.Modal.WXActiveIndicator).ToList();
                        foreach (HostModal modal in hostModals)
                        {
                            WXHostModal wxModal = new WXHostModal();
                            wxModal.HostID = modal.HostID;
                            wxModal.Name = ReturnNameByLanguage(modal.Modal.Name, modal.Modal.EnglishName, modal.Modal.TWName);
                            wxModal.ModalAddress = modal.Modal.ModalAddress;
                            wxModal.Status = modal.Status;
                            result.Add(wxModal);
                        }
                        break;
                    case "dianshi":
                        hostModals = HostModalManager.Load(host.ID, DeviceType.TV).Where(r => r.Modal.WXActiveIndicator).ToList();
                        foreach (HostModal modal in hostModals)
                        {
                            WXHostModal wxModal = new WXHostModal();
                            wxModal.HostID = modal.HostID;
                            wxModal.Name = ReturnNameByLanguage(modal.Modal.Name, modal.Modal.EnglishName, modal.Modal.TWName);
                            wxModal.ModalAddress = modal.Modal.ModalAddress;
                            result.Add(wxModal);
                        }
                        break;
                    case "yinyue":
                        hostModals = HostModalManager.Load(host.ID, DeviceType.Music).Where(r => r.Modal.WXActiveIndicator).ToList();
                        foreach (HostModal modal in hostModals)
                        {
                            WXHostModal wxModal = new WXHostModal();
                            wxModal.HostID = modal.HostID;
                            wxModal.Name = ReturnNameByLanguage(modal.Modal.Name, modal.Modal.EnglishName, modal.Modal.TWName);
                            wxModal.ModalAddress = modal.Modal.ModalAddress;
                            wxModal.Status = modal.Status;
                            wxModal.Brightness = modal.Brightness;
                            wxModal.Mode = modal.Mode;
                            result.Add(wxModal);
                        }
                        break;
                }
                return Json(new { IsSuccess = true, Result = result, IsControl = isControl }, JsonRequestBehavior.AllowGet);
            }
            catch (Exception ex)
            {
                logger.Error(ex);
                return Json(new { IsSuccess = false, Result = HttpContext.InnerLanguage("OperationFailed") + "：" + ex.Message }, JsonRequestBehavior.AllowGet);
            }
        }
        /// <summary>
        /// 设备控制（服务、调光）
        /// </summary>
        /// <param name="hostID"></param>
        /// <param name="modalAddress"></param>
        /// <param name="status"></param>
        /// <param name="brightness"></param>
        /// <returns></returns>
        public ActionResult SetDevice(int hostID, string modalAddress, int status, int brightness, int temperature, int fanSpeed, int mode, int valve)
        {
            try
            {
                Host host = HostManager.Get(hostID);
                var hostModal = HostModalManager.GetByModalAddress(hostID, modalAddress);
                if (hostModal == null)
                {
                    return Json(new { IsSuccess = false, Result = HttpContext.InnerLanguage("InvalidControl") }, JsonRequestBehavior.AllowGet);
                }
                HostModalManager.SetDevice(host, hostModal, status, brightness, temperature, fanSpeed, mode, valve);
                string detail = string.Format("{0}客房{1}{2}({3})回路", (status == 1 ? "打开" : "关闭"), host.RoomNumber, hostModal.Modal.Name, modalAddress);
                SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("DeviceControl"), detail, true, "微信", host.SysHotel.ID);
                return Json(new { IsSuccess = true, Result = HttpContext.InnerLanguage("OperationSuccess") }, JsonRequestBehavior.AllowGet);
            }
            catch (Exception ex)
            {
                logger.Error(ex);
                return Json(new { IsSuccess = false, Result = HttpContext.InnerLanguage("OperationFailed") + "：" + ex.Message }, JsonRequestBehavior.AllowGet);
            }
        }
        /// <summary>
        /// 设置调色
        /// </summary>
        /// <param name="hostID"></param>
        /// <param name="modalAddress"></param>
        /// <param name="modalAddress1"></param>
        /// <param name="brightness1"></param>
        /// <param name="modalAddress2"></param>
        /// <param name="brightness2"></param>
        /// <param name="modalAddress3"></param>
        /// <param name="brightness3"></param>
        /// <returns></returns>
        public ActionResult SetTiaoseDevice(int hostID, string modalAddress, string modalAddress1, int brightness1, string modalAddress2, int brightness2, string modalAddress3, int brightness3)
        {
            try
            {
                Host host = HostManager.Get(hostID);
                //000回路
                var hostModal = HostModalManager.GetByModalAddress(hostID, modalAddress);
                if (hostModal == null)
                {
                    return Json(new { IsSuccess = false, Result = HttpContext.InnerLanguage("InvalidControl") }, JsonRequestBehavior.AllowGet);
                }
                int status = 1, brightness = 100;
                if (brightness1 == 0 && brightness2 == 0 && brightness3 == 0)
                {
                    status = 2;
                    brightness = 0;
                }
                HostModalManager.SetDevice(host, hostModal, status, brightness, 0, 0, 0, 0);
                //001回路R颜色
                hostModal = HostModalManager.GetByModalAddress(hostID, modalAddress1);
                if (hostModal == null)
                {
                    return Json(new { IsSuccess = false, Result = HttpContext.InnerLanguage("InvalidControl") }, JsonRequestBehavior.AllowGet);
                }
                HostModalManager.SetDevice(host, hostModal, brightness1 == 0 ? 2 : 1, brightness1, 0, 0, 0, 0);
                //002回路G颜色
                hostModal = HostModalManager.GetByModalAddress(hostID, modalAddress2);
                if (hostModal == null)
                {
                    return Json(new { IsSuccess = false, Result = HttpContext.InnerLanguage("InvalidControl") }, JsonRequestBehavior.AllowGet);
                }
                HostModalManager.SetDevice(host, hostModal, brightness2 == 0 ? 2 : 1, brightness2, 0, 0, 0, 0);
                //003回路B颜色
                hostModal = HostModalManager.GetByModalAddress(hostID, modalAddress3);
                if (hostModal == null)
                {
                    return Json(new { IsSuccess = false, Result = HttpContext.InnerLanguage("InvalidControl") }, JsonRequestBehavior.AllowGet);
                }
                HostModalManager.SetDevice(host, hostModal, brightness3 == 0 ? 2 : 1, brightness3, 0, 0, 0, 0);

                string detail = string.Format("{0}客房{1}{2}({3})，调色{4}", (status == 1 ? "打开" : "关闭"), host.RoomNumber, hostModal.Modal.Name, modalAddress, brightness);
                SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("DeviceControl"), detail, true, "微信", host.SysHotel.ID);

                return Json(new { IsSuccess = true, Result = HttpContext.InnerLanguage("OperationSuccess") }, JsonRequestBehavior.AllowGet);
            }
            catch (Exception ex)
            {
                logger.Error(ex);
                return Json(new { IsSuccess = false, Result = HttpContext.InnerLanguage("OperationFailed") + "：" + ex.Message }, JsonRequestBehavior.AllowGet);
            }
        }
        /// <summary>
        /// 场景控制
        /// </summary>
        /// <param name="hostID"></param>
        /// <param name="sceneID"></param>
        /// <returns></returns>
        public ActionResult SetScene(int hostID, int sceneID, bool takeInverse)
        {
            try
            {
                Host host = HostManager.Get(hostID);
                var scene = RoomTypeSceneManager.Get(sceneID);
                if (scene == null)
                {
                    return Json(new { IsSuccess = false, Result = HttpContext.InnerLanguage("InvalidScene") }, JsonRequestBehavior.AllowGet);
                }
                LightControlManager.ApplyScene(host, scene, takeInverse);
                SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("SceneControl"), string.Format("打开客房{0}{1}场景", host.RoomNumber, scene.Name), true, "微信", host.SysHotel.ID);
                return Json(new { IsSuccess = true, Result = HttpContext.InnerLanguage("OperationSuccess") }, JsonRequestBehavior.AllowGet);
            }
            catch (Exception ex)
            {
                logger.Error(ex);
                return Json(new { IsSuccess = false, Result = HttpContext.InnerLanguage("OperationFailed") + "：" + ex.Message }, JsonRequestBehavior.AllowGet);
            }
        }

        public ActionResult Error(string msg)
        {
            ViewData["Error"] = msg;
            return View();
        }
    }

    public class WXMenu
    {
        public string Code { get; set; }
        public string Name { get; set; }
        public bool TakePower { get; set; }
    }

    public class WXEntity
    {
        public int HostID { get; set; }
        public string RoomNumber { get; set; }
        public string WXLockModalAddress { get; set; }
        public int WXLockStatus { get; set; }
    }

    public class WXHostModal
    {
        public int HostID { get; set; }
        public string Name { get; set; }
        public string ModalAddress { get; set; }
        public string ModalAddress1 { get; set; }
        public string ModalAddress2 { get; set; }
        public string ModalAddress3 { get; set; }
        public string ModalAddress4 { get; set; }
        public int Status { get; set; }//状态
        public int Brightness { get; set; }
        public int Brightness1 { get; set; }//亮度R
        public int Brightness2 { get; set; }//亮度G
        public int Brightness3 { get; set; }//亮度B
        public int Brightness4 { get; set; }//亮度白光
        public int CurrentTemp { get; set; }//当前温度
        public int SettingTemp { get; set; }//设置温度
        public int FanSpeed { get; set; }//风速
        public int Mode { get; set; }//模式
        public int Valve { get; set; }//阀门状态
    }

    public class WXRoomTypeScene
    {
        public int ID { get; set; }
        public int HostID { get; set; }
        public string Name { get; set; }
        public int Status { get; set; }
        public bool TakeInverse { get; set; }
    }
}
