using System.Collections.Generic;
using System.Linq;
using System.Net.NetworkInformation;
using FineUIPro;
using Model;
namespace BLL
{
    /// 
    /// 开车分包联络
    /// 
    public static class DriverSubContactService
    {
        /// 
        /// 根据主键获取开车分包联络信息
        /// 
        /// 
        /// 
        public static Model.DriverSub_DriverSubContact GetDriverSubContactById(string DriverSubContactId)
        {
            return Funs.DB.DriverSub_DriverSubContact.FirstOrDefault(e => e.DriverSubContactId == DriverSubContactId);
        }
        public static List GetDriverSubContactByProjectid(string projectId)
        {
            return Funs.DB.DriverSub_DriverSubContact.Where(e => e.ProjectId == projectId).ToList();
        }
        public static List GetDriverSubContactByDriverSubPlanId(
            string DriverSubPlanId)
        {
            return Funs.DB.DriverSub_DriverSubContact.Where(e => e.DriverSubPlanId == DriverSubPlanId).ToList();
        }
        /// 
        /// 添加开车分包联络信息
        /// 
        /// 
        public static void AddDriverSubContact(Model.DriverSub_DriverSubContact DriverSubContact)
        {
            Model.DriverSub_DriverSubContact newDriverSubContact = new Model.DriverSub_DriverSubContact();
            newDriverSubContact.DriverSubContactId = DriverSubContact.DriverSubContactId;
            newDriverSubContact.ProjectId = DriverSubContact.ProjectId;
            newDriverSubContact.Code = DriverSubContact.Code;
            newDriverSubContact.Remark = DriverSubContact.Remark;
            newDriverSubContact.DriverSubPlanId= DriverSubContact.DriverSubPlanId;
            newDriverSubContact.DriverSubContractorsId = DriverSubContact.DriverSubContractorsId;
            newDriverSubContact.SubcontractingType = DriverSubContact.SubcontractingType;
            newDriverSubContact.IsBidirectional = DriverSubContact.IsBidirectional;
            newDriverSubContact.State= DriverSubContact.State;
            Funs.DB.DriverSub_DriverSubContact.InsertOnSubmit(newDriverSubContact);
            Funs.DB.SubmitChanges();
        }
        /// 
        /// 修改开车分包联络
        /// 
        /// 
        public static void UpdateDriverSubContact(Model.DriverSub_DriverSubContact DriverSubContact)
        {
            Model.DriverSub_DriverSubContact newDriverSubContact = Funs.DB.DriverSub_DriverSubContact.FirstOrDefault(e => e.DriverSubContactId == DriverSubContact.DriverSubContactId);
            if (newDriverSubContact != null)
            {
                newDriverSubContact.Code = DriverSubContact.Code;
                newDriverSubContact.Remark = DriverSubContact.Remark;
                newDriverSubContact.DriverSubPlanId = DriverSubContact.DriverSubPlanId;
                newDriverSubContact.DriverSubContractorsId = DriverSubContact.DriverSubContractorsId;
                newDriverSubContact.SubcontractingType = DriverSubContact.SubcontractingType;
                newDriverSubContact.IsBidirectional = DriverSubContact.IsBidirectional;
                newDriverSubContact.State = DriverSubContact.State;
                Funs.DB.SubmitChanges();
            }
        }
        /// 
        /// 根据主键删除开车分包联络
        /// 
        /// 
        public static void DeleteDriverSubContactById(string DriverSubContactId)
        {
            Model.DriverSub_DriverSubContact DriverSubContact = Funs.DB.DriverSub_DriverSubContact.FirstOrDefault(e => e.DriverSubContactId == DriverSubContactId);
            if (DriverSubContact != null)
            {
                Funs.DB.DriverSub_DriverSubContact.DeleteOnSubmit(DriverSubContact);
                Funs.DB.SubmitChanges();
            }
        }
        /// 
        /// 根据开车分包计划主键删除开车分包联络
        /// 
        /// 
        public static void DeleteDriverSubContactByDriverSubPlanId(string DriverSubPlanId)
        {
            List DriverSubContact = Funs.DB.DriverSub_DriverSubContact.Where(e => e.DriverSubPlanId == DriverSubPlanId).ToList();
            if (DriverSubContact.Count>0)
            {
                Funs.DB.DriverSub_DriverSubContact.DeleteAllOnSubmit(DriverSubContact);
                Funs.DB.SubmitChanges();
            }
        }
        
        public static void InitDropListByDriverSubPlanId(string driverSubPlanId, string type, DropDownList dropDownList)
        {
            dropDownList.DataSource = from x in Funs.DB.DriverSub_DriverSubContact
                join y in Funs.DB.DriverSub_DriverSubContractors on x.DriverSubContractorsId equals y
                    .DriverSubContractorsId
                where x.DriverSubPlanId== driverSubPlanId && x.SubcontractingType == type
                                      select new { x.DriverSubContractorsId, y.SubUnitName };
            dropDownList.DataTextField = "SubUnitName";
            dropDownList.DataValueField = "DriverSubContractorsId";
            dropDownList.DataBind();
        }
        /// 
        /// 根据driverSubPlanId判断是否选标完成
        /// 
        /// 
        /// 
        public static bool IsAllBidirectional(string driverSubPlanId)
        {
            //获取DriverSubPlanId对应的所有数据
            var list = Funs.DB.DriverSub_DriverSubContact.Where(e => e.DriverSubPlanId == driverSubPlanId).ToList();
            //按SubcontractingType分组,检查每组数据是否都存在一个中标单位
            var allExist = list.GroupBy(item => item.SubcontractingType)
                .All(g => g.Any(item => item.IsBidirectional == true));
            return allExist;
        }
        public static Model.DriverSub_DriverSubContact GetBidirectional(string driverSubPlanId ,string subcontractingType)
        {
            return Funs.DB.DriverSub_DriverSubContact.FirstOrDefault(e => e.DriverSubPlanId == driverSubPlanId && e.IsBidirectional == true && e.SubcontractingType== subcontractingType);
        }
        //根据driverSubPlanId 和DriverSubContractorsId 确定中标单位,使其IsBidirectional为true,且当前SubcontractingType下其他为false
        /// 
        /// 确定中标单位
        /// 
        /// 
        /// 
        public static void SetBidirectional(string driverSubPlanId, string driverSubContractorsId)
        {
            //根据driverSubPlanId 和DriverSubContractorsId 获取SubcontractingType
            var subcontractingType= Funs.DB.DriverSub_DriverSubContact.FirstOrDefault(e => e.DriverSubContractorsId == driverSubContractorsId &&e.DriverSubPlanId== driverSubPlanId
            
            )?.SubcontractingType;
            var list = Funs.DB.DriverSub_DriverSubContact.Where(e => e.DriverSubPlanId == driverSubPlanId && e.SubcontractingType == subcontractingType).ToList();
            foreach (var item in list)
            {
                if (item.DriverSubContractorsId == driverSubContractorsId)
                {
                    item.IsBidirectional = true;
                }
                else
                {
                    item.IsBidirectional = false;
                }
            }
            Funs.DB.SubmitChanges();
        }
        /// 
        /// 确定分包商状态
        /// 
        /// 
        /// 
        /// 
        public static void SetState(string driverSubPlanId, string driverSubContractorsId, string state)
        {
            if (string.IsNullOrEmpty(state))
            {
                return;
            }
            var list = Funs.DB.DriverSub_DriverSubContact.Where(e => e.DriverSubPlanId == driverSubPlanId && e.DriverSubContractorsId == driverSubContractorsId).ToList();
            foreach (var item in list)
            {
                item.State =int.Parse( state);
            }
            Funs.DB.SubmitChanges();
        }
        /// 
        /// 分包状态下拉框
        /// 
        /// 
        public static void InitDriverSubPlanState( DropDownList dropDownList)
        {
           dropDownList.DataSource = DropListService.drpDriverSubPlanStateList();
           dropDownList.DataTextField = "Text";
           dropDownList.DataValueField = "Value";
           dropDownList.DataBind(); ;
        }
    }
}