using BLL;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;

namespace FineUIPro.Web.ProjectData
{
    public partial class ProjectMonitorList : PageBase
    {

        /// <summary>
        /// 定义项
        /// </summary>
        public string ProjectCode
        {
            get
            {
                return (string)ViewState["ProjectCode"];
            }
            set
            {
                ViewState["ProjectCode"] = value;
            }
        }
        public string Id
        {
            get
            {
                return (string)ViewState["Id"];
            }
            set
            {
                ViewState["Id"] = value;
            }
        }
        public string Devices
        {
            get
            {
                string url = ConfigurationManager.AppSettings["Video_URL"];
                string res = APIGetHttpService.Http(url + "api/v1/user/channellist?token=" + URLToken + "&id=" + Id + "&related=true");
                string devices = "";
                JObject jObject = (JObject)JsonConvert.DeserializeObject(res);
                JArray channelList = jObject.Value<JArray>("ChannelList");
                HashSet<string> set = new HashSet<string>();
                foreach (var c in channelList)
                {
                    set.Add(c["DeviceID"] + ":" + c["ID"]);
                }
                if (set.Count > 0)
                {
                    devices = string.Join(",", set);
                }
                return devices;
            }
            set
            {
                ViewState["Devices"] = value;
            }
        }

        /// <summary>
        /// 定义项
        /// </summary>
        public string URLToken
        {
            get
            {
                return (string)ViewState["URLToken"];
            }
            set
            {
                ViewState["URLToken"] = value;
            }
        }

        #region 加载
        /// <summary>
        /// 加载页面
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.ProjectCode = Request.QueryString["ProjectCode"];
                this.URLToken = Request.QueryString["URLToken"];
                this.Id = Request.QueryString["Id"];
                Funs.DropDownPageSize(this.ddlPageSize);
                if (this.CurrUser != null && this.CurrUser.PageSize.HasValue)
                {
                    Grid1.PageSize = this.CurrUser.PageSize.Value;
                }
                this.ddlPageSize.SelectedValue = Grid1.PageSize.ToString();
                // 绑定表格
               
                this.BindGrid();
            }
        }
        #endregion

        #region 绑定数据
        /// <summary>
        /// 绑定数据
        /// </summary>
        private void BindGrid()
        {


            DataTable dt = new DataTable();
            dt.Columns.Add("id");
            dt.Columns.Add("name");
            dt.Columns.Add("serial");
            dt.Columns.Add("deviceName");
            string url = ConfigurationManager.AppSettings["Video_URL"];
            List<string> urls = new List<string>();
            string res = APIGetHttpService.Http(url + "api/v1/device/channeltree?token=" + URLToken);

            List<Dictionary<string, string>> jsonNvr = JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(res);
            foreach (Dictionary<string, string> nvr in jsonNvr)
            {
                if (string.IsNullOrEmpty(txtProjectName.Text.Trim()) || nvr["customName"].Contains(txtProjectName.Text.Trim()))
                {
                    string jsonCameras = APIGetHttpService.Http(url + "api/v1/device/channeltree?token=" + URLToken + "&serial=" + nvr["serial"]);
                    List<Dictionary<string, string>> jsonDiv = JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(jsonCameras);
                    foreach (Dictionary<string, string> div in jsonDiv)
                    {
                        var rowDiv = dt.NewRow();
                        rowDiv["id"] = div["id"];
                        rowDiv["deviceName"] = nvr["customName"];
                        if (!string.IsNullOrEmpty(div["customName"]))
                        {
                            rowDiv["name"] = div["customName"];
                        }
                        else
                        {
                            rowDiv["name"] = div["name"];
                        }
                        rowDiv["serial"] = div["code"];

                        dt.Rows.Add(rowDiv);
                    }
                }
            }



            Grid1.RecordCount = dt.Rows.Count;
            Grid1.DataSource = this.GetPagedDataTable(Grid1, dt);
            Grid1.DataBind();
            if (!string.IsNullOrEmpty(Devices))
            {
                Grid1.SelectedRowIDArray = Devices.Split(',');
            }
        }
        #endregion

        #region Grid
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
        {
            BindGrid();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
        {

            Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue);
            BindGrid();
        }

        protected void Grid1_Sort(object sender, FineUIPro.GridSortEventArgs e)
        {
            BindGrid();
        }
        #endregion


        protected void btnSearch_Click(object sender, EventArgs e)
        {
            BindGrid();
        }


        protected void Grid1_RowSelect(object sender, GridRowSelectEventArgs e)
        {
            string url = ConfigurationManager.AppSettings["Video_URL"];
            APIGetHttpService.Http(url + "api/v1/user/savechannels?token=" + URLToken + "&id=" + Id + "&channels[]=" + e.RowID);           
            
        }



        protected void Grid1_RowDeselect(object sender, GridRowSelectEventArgs e)
        {

            string url = ConfigurationManager.AppSettings["Video_URL"];
            APIGetHttpService.Http(url + "api/v1/user/removechannels?token=" + URLToken + "&id=" + Id + "&channels[]=" + e.RowID);           
        }
    }
}