using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using BLL;

namespace WebAPI.Controllers
{
    /// <summary>
    /// 首页数据
    /// </summary>
    public class PageDataController : ApiController
    {
        #region 根据projectId获取首页数据
        /// <summary>
        /// 根据projectId获取首页数据
        /// </summary>
        /// <param name="projectId"></param>
        /// <returns></returns>
        public Model.ResponeData getPageDataByProject(string projectId)
        {
            var responeData = new Model.ResponeData();
            try
            {
                Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString);
                var getProject = ProjectService.GetProjectByProjectId(projectId);
                if (getProject != null)
                {
                    ////项目开始时间
                    string ProjectData = string.Format("{0:yyyy-MM-dd}", DateTime.Now);
                    int SafeDayCount = 0, SafeHours = 0, SitePersonNum = 0, SpecialEquipmentNum = 0, EntryTrainingNum = 0, HiddenDangerNum = 0,
                     RectificationNum = 0, RiskI = 0, RiskII = 0, RiskIII = 0, RiskIV = 0, RiskV = 0;
                    if (getProject.StartDate.HasValue)
                    {
                        ProjectData = string.Format("{0:yyyy-MM-dd}", getProject.StartDate);
                        ////安全运行天数
                        SafeDayCount = Convert.ToInt32((DateTime.Now - getProject.StartDate).Value.TotalDays);
                    }

                    //获取输入数据记录
                    var getDataList =db.Wx_PageData.FirstOrDefault(x => x.ProjectId == projectId && x.CreatDate.Value.Year == DateTime.Now.Year
                                    && x.CreatDate.Value.Month == DateTime.Now.Month && x.CreatDate.Value.Day == DateTime.Now.Day);
                    if (getDataList != null)
                    {
                        SafeHours = getDataList.SafeHours ?? 0;
                        SitePersonNum = getDataList.SitePersonNum ?? 0;
                        SpecialEquipmentNum = getDataList.SpecialEquipmentNum ?? 0;
                        EntryTrainingNum = getDataList.EntryTrainingNum ?? 0;
                        HiddenDangerNum = getDataList.HiddenDangerNum ?? 0;
                        RectificationNum = getDataList.RectificationNum ?? 0;
                        RiskI = getDataList.RiskI ?? 0;
                        RiskII = getDataList.RiskII ?? 0;
                        RiskIII = getDataList.RiskIII ?? 0;
                        RiskIV = getDataList.RiskIV ?? 0;
                        RiskV = getDataList.RiskV ?? 0;
                    }
                    else
                    {
                        int weekDay = WeekDayService.CaculateWeekDay(DateTime.Now);
                        //当前周的范围
                        DateTime retStartDay = DateTime.Now.AddDays(-(weekDay - 1)).AddDays(-1);
                        DateTime retEndDay = DateTime.Now.AddDays(6 - weekDay).AddDays(1);

                        var getHazardItems = from x in db.Hazard_HazardSelectedItem
                                             join y in db.Hazard_HazardList on x.HazardListId equals y.HazardListId
                                             where y.ProjectId == projectId && y.CompileDate > retStartDay && y.CompileDate < retEndDay
                                             select x;
                        if (getHazardItems.Count() > 0)
                        {
                            RiskI = getHazardItems.Where(x => x.HazardLevel == "1").Count();
                            RiskII = getHazardItems.Where(x => x.HazardLevel == "2").Count();
                            RiskIII = getHazardItems.Where(x => x.HazardLevel == "3").Count();
                            RiskIV = getHazardItems.Where(x => x.HazardLevel == "4").Count();
                            RiskV = getHazardItems.Where(x => x.HazardLevel == "5").Count();
                        }
                        //// 隐患整改
                        var getRectifyNotices = from x in db.Check_RectifyNotices
                                                where x.ProjectId == projectId && x.SignDate.HasValue
                                                select x;
                        if (getRectifyNotices.Count() > 0)
                        {
                            HiddenDangerNum = getRectifyNotices.Count();
                            RectificationNum = getRectifyNotices.Where(x => x.States == "5").Count();
                        }

                        //// 大型及特种设备
                        SpecialEquipmentNum = (from x in db.QualityAudit_EquipmentQuality
                                               join y in db.Base_SpecialEquipment on x.SpecialEquipmentId equals y.SpecialEquipmentId
                                               where x.ProjectId == projectId && (y.SpecialEquipmentType == "1" || y.SpecialEquipmentType == "2" || y.SpecialEquipmentType == "3")
                                               && (!x.OutDate.HasValue || x.OutDate > DateTime.Now)
                                               select x).Count();

                        //// 入场培训累计数量
                        //// 入场培训累计数量
                        var getTrainRecords = from x in db.EduTrain_TrainRecord
                                              where x.ProjectId == projectId && x.TrainTypeId == Const.EntryTrainTypeId
                                              select x;
                        if (getTrainRecords.Count() > 0)
                        {
                            EntryTrainingNum = getTrainRecords.Sum(x => x.TrainPersonNum ?? 0);
                        }
                        var getPersonInOutNumber = db.SitePerson_PersonInOutNumber.FirstOrDefault(x => x.ProjectId == projectId && x.InOutDate.Year == DateTime.Now.Year
                          && x.InOutDate.Month == DateTime.Now.Month && x.InOutDate.Day == DateTime.Now.Day);
                        if (getPersonInOutNumber != null)
                        {
                            //// 现场人员数
                            SitePersonNum = getPersonInOutNumber.PersonNum ?? 0;
                            //// 获取工时                        
                            SafeHours = getPersonInOutNumber.WorkHours ?? 0;
                        }
                        else
                        {
                            SafeHours = APIPageDataService.getSafeHours(projectId);
                            //  GetDataService.CorrectingPersonInOutNumber(projectId);
                        }
                    }
                    string hiddenStr = RectificationNum.ToString() + "/" + HiddenDangerNum.ToString();
                    responeData.data = new { ProjectData, SafeDayCount, SafeHours, SitePersonNum, SpecialEquipmentNum, EntryTrainingNum, hiddenStr, RiskI, RiskII, RiskIII, RiskIV, RiskV };
                }
            }
            catch (Exception ex)
            {
                responeData.code = 0;
                responeData.message = ex.Message;
            }

            return responeData;
        }
        #endregion

        #region 根据projectId获取首页数据-当日入场人数
        /// <summary>
        /// 根据projectId获取首页数据-当日入场人数
        /// </summary>
        /// <param name="projectId"></param>
        /// <returns></returns>
        public Model.ResponeData getPageDataInPersonCoutt(string projectId)
        {
            var responeData = new Model.ResponeData();
            try
            {
                var getPrsonLists = Funs.DB.SitePerson_PersonInOutNow.Where(x => x.ProjectId == projectId && x.IsIn == true
                                            && x.ChangeTime.Value.Year == DateTime.Now.Year  && x.ChangeTime.Value.Month == DateTime.Now.Month
                                             && x.ChangeTime.Value.Day == DateTime.Now.Day);
                int personCout = getPrsonLists.Select(x => x.PersonId).Distinct().Count();
                responeData.data = new { personCout };
            }
            catch (Exception ex)
            {
                responeData.code = 0;
                responeData.message = ex.Message;
            }

            return responeData;
        }
        #endregion

        #region 根据projectId获取首页数据-当前人数
        /// <summary>
        /// 根据projectId获取首页数据-当日入场人数
        /// </summary>
        /// <param name="projectId"></param>
        /// <returns></returns>
        public Model.ResponeData getPersonNum(string projectId)
        {
            var responeData = new Model.ResponeData();
            try
            {                
                int SitePersonNum = APIPageDataService.getPersonNum(projectId, DateTime.Now).Count();
                responeData.data = new { SitePersonNum };
            }
            catch (Exception ex)
            {
                responeData.code = 0;
                responeData.message = ex.Message;
            }

            return responeData;
        }
        #endregion   

        #region 根据projectId获取首页数据-人工时
        /// <summary>
        /// 根据projectId获取首页数据-当日入场人数
        /// </summary>
        /// <param name="projectId"></param>
        /// <returns></returns>
        public Model.ResponeData getSafeHours(string projectId)
        {
            var responeData = new Model.ResponeData();
            try
            {
                int safeHours = APIPageDataService.getSafeHours(projectId);
                responeData.data = new { safeHours };
            }
            catch (Exception ex)
            {
                responeData.code = 0;
                responeData.message = ex.Message;
            }

            return responeData;
        }
        #endregion   
    }
}