namespace BLL
{
    using Model;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web.UI.WebControls;
    public static class InterFaceService
    {
        public static Model.SGGLDB db = Funs.DB;
        /// 
        /// 获取接口设置信息
        /// 
        /// 设置Id
        /// 接口设置信息
        public static Model.InterFaceSet GetFaceSetById(string InterFaceSetId)
        {
            return Funs.DB.InterFaceSet.FirstOrDefault(e => e.InterFaceSetId == InterFaceSetId);
        }
        /// 
        /// 增加接口设置信息
        /// 
        /// 接口设置
        public static void AddFaceSet(Model.InterFaceSet faceset)
        {
            Model.SGGLDB db = Funs.DB;
            string newKeyID = SQLHelper.GetNewID(typeof(Model.InterFaceSet));
            List detailList = new List();
            Model.InterFaceSet newSet = new Model.InterFaceSet
            {
                InterFaceSetId = newKeyID,
                InterFaceName = faceset.InterFaceName,
                AuthUnitIds = faceset.AuthUnitIds,
                AuthUnitName = faceset.AuthUnitName,
                InterFaceUrl = faceset.InterFaceUrl,
                InterFaceForUrl = faceset.InterFaceForUrl,
                ValidPeriod = faceset.ValidPeriod,
                UnitId = faceset.UnitId,
                TxtRemarks = faceset.TxtRemarks,
                IsOpen = faceset.IsOpen,
                IsReqPost = faceset.IsReqPost,
                IsCallBack= faceset.IsCallBack,
                InterFaceCallBackUrl= faceset.InterFaceCallBackUrl,
            };
            //明细表
            foreach (var AuthUnitId in newSet.AuthUnitIds.Split(','))
            {
                Model.InterFaceDetail deteil = new Model.InterFaceDetail
                {
                    InterFaceDetailId = SQLHelper.GetNewID(typeof(Model.InterFaceDetail)),
                    InterFaceName = newSet.InterFaceName,
                    UnitId = newSet.UnitId,
                    AuthUnitIds = AuthUnitId,
                    InterFaceSetlId = newSet.InterFaceSetId,
                    ReportState = false,
                    GainState = false,
                };
                detailList.Add(deteil);
            }
            db.InterFaceDetail.InsertAllOnSubmit(detailList);
            db.InterFaceSet.InsertOnSubmit(newSet);
            db.SubmitChanges();
        }
        /// 
        /// 修改接口设置信息
        /// 
        /// 接口设置实体
        public static void UpdateFaceSet(Model.InterFaceSet user)
        {
            Model.SGGLDB db = Funs.DB;
            List detailList = new List();
            Model.InterFaceSet newSet = db.InterFaceSet.FirstOrDefault(e => e.InterFaceSetId == user.InterFaceSetId);
            if (newSet != null)
            {
                newSet.InterFaceName = user.InterFaceName;
                newSet.AuthUnitIds = user.AuthUnitIds;
                newSet.AuthUnitName = user.AuthUnitName;
                newSet.InterFaceUrl = user.InterFaceUrl;
                newSet.InterFaceForUrl = user.InterFaceForUrl;
                newSet.UnitId = user.UnitId;
                newSet.ValidPeriod = user.ValidPeriod;
                newSet.UnitId = user.UnitId;
                newSet.TxtRemarks = user.TxtRemarks;
                newSet.IsOpen = user.IsOpen;
                newSet.IsReqPost = user.IsReqPost;
                newSet.IsCallBack = user.IsCallBack;
                newSet.InterFaceCallBackUrl= user.InterFaceCallBackUrl;
                var AuthUnitIds = newSet.AuthUnitIds.Split(',');
                //明细表
                List FaceDetailList = db.InterFaceDetail.Where(e => e.InterFaceSetlId == user.InterFaceSetId).ToList();
                //删除无效明细
                var oldDetails = FaceDetailList.Where(p=> !AuthUnitIds.Equals(p.AuthUnitIds)) ;
                if (oldDetails.Count() > 0)
                {
                    db.InterFaceDetail.DeleteAllOnSubmit(oldDetails);
                }
                foreach (var AuthUnitId in AuthUnitIds)
                {
                    Model.InterFaceDetail deteil = new Model.InterFaceDetail
                    {
                        InterFaceDetailId = SQLHelper.GetNewID(typeof(Model.InterFaceDetail)),
                        InterFaceName = newSet.InterFaceName,
                        UnitId = newSet.UnitId,
                        AuthUnitIds = AuthUnitId,
                        InterFaceSetlId = newSet.InterFaceSetId,
                    };
                    var FaceDetail = FaceDetailList.FirstOrDefault(p => p.AuthUnitIds == AuthUnitId);
                    if (FaceDetail == null)
                    {
                        detailList.Add(deteil);
                    }
                }
                db.InterFaceDetail.InsertAllOnSubmit(detailList);
                db.SubmitChanges();
            }
        }
        /// 
        /// 根据Id删除信息
        /// 
        /// 
        public static void DeleteFaceSet(string SetId)
        {
            Model.SGGLDB db = Funs.DB;
            Model.InterFaceSet FaceSet = db.InterFaceSet.FirstOrDefault(e => e.InterFaceSetId == SetId);
            if (FaceSet != null)
            {
                var logs = from x in db.Sys_Log where x.UserId == SetId select x;
                if (logs.Count() > 0)
                {
                    db.Sys_Log.DeleteAllOnSubmit(logs);
                }
                db.InterFaceSet.DeleteOnSubmit(FaceSet);
                db.SubmitChanges();
            }
        }
        /// 
        /// 保存上报数据记录
        /// 
        /// 上报数据
        /// 
        public static string SaveUpData(Model.InterFaceItem newItem)
        {
            if (newItem.FaceLogDate.Count() == 0)
                return "数据不可为空!";
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                List InterFaceLogIdList = new List();
                List logList = new List();
                string message = string.Empty;
                var FaceDetailList = db.InterFaceDetail.Where(x => newItem.FaceLogDate.Select(p=>p.UnitId).Equals(x.UnitId));
                foreach (var item in newItem.FaceLogDate)
                {
                    //如果配置接口名称存在 进行数据保存
                    var faceDetail = FaceDetailList.FirstOrDefault(p => p.InterFaceName == item.InterFaceName);
                    if (faceDetail != null)
                    {
                        faceDetail.ReportDate = DateTime.Now;
                        faceDetail.ReportState = true;
                        Model.InterFaceLog FaceLog = new Model.InterFaceLog();
                        FaceLog.InterFaceLogId = SQLHelper.GetNewID(typeof(Model.InterFaceLog));
                        FaceLog.TxtContent = item.TxtContent;
                        FaceLog.InterFaceLogDate = Convert.ToDateTime(item.InterFaceLogDate);
                        FaceLog.LogSate = false;
                        FaceLog.CollCropCode = item.CollCropCode;
                        FaceLog.IP = item.IP;
                        FaceLog.UnitId = item.UnitId;
                        FaceLog.InterFaceDetailId = faceDetail.InterFaceDetailId;
                        logList.Add(FaceLog);
                    }
                    else //配置接口名称不存在 记录反馈给前端提示
                    {
                        InterFaceLogIdList.Add(item.InterFaceName);
                    }
                }
                db.InterFaceLog.InsertAllOnSubmit(logList);
                db.SubmitChanges();
            }
            return "数据同步成功";
        }
    }
}