using System.Web.Http;
using Model;
using System.Collections.Generic;
using System;
using BLL;

namespace Mvc.Controllers
{
    public class CQMSConstructSolutionController : ApiController
    {
        //
        // 质量巡检
        // GET: /Draw/
        [HttpGet]
        public ResponseData<List<Solution_CQMSConstructSolution>> Index(string projectId, int index, int page, string name = null)
        {
            ResponseData<List<Solution_CQMSConstructSolution>> res = new ResponseData<List<Solution_CQMSConstructSolution>>();

            res.successful = true;
            res.resultValue = BLL.CQMSConstructSolutionService.getListDataForApi(name, projectId, index, page);
            return res;
        }
        [HttpGet]
        public ResponseData<List<Solution_CQMSConstructSolution>> Search(string projectId, int index, int page, string unitId = "",string unitWork= "",string cNProfessionalCode="", string solutionType = "", string state = "")
        {
            ResponseData<List<Solution_CQMSConstructSolution>> res = new ResponseData<List<Solution_CQMSConstructSolution>>();

            res.successful = true;
            res.resultValue = BLL.CQMSConstructSolutionService.getListDataForApi("", unitId ,  unitWork , cNProfessionalCode,  solutionType ,  state, projectId, index, page);
            return res;
        }
        /// <summary>
        /// 根据code获取详情
        /// </summary>
        /// <param name="CheckControlCode"></param>
        /// <returns></returns>
        public ResponseData<Solution_CQMSConstructSolution> GetSolution(string id)
        {
            ResponseData<Solution_CQMSConstructSolution> res = new ResponseData<Solution_CQMSConstructSolution>();
            Solution_CQMSConstructSolution checkControl = BLL.CQMSConstructSolutionService.GetConstructSolutionByConstructSolutionIdForApi(id);
            res.successful = true;
            res.resultValue = BeanUtil.CopyOjbect<Solution_CQMSConstructSolution>(checkControl, true);
            res.resultValue.Edition = checkControl.Edition;
            return res;
        }
        /// <summary>
        /// 根据code获取 审核记录
        /// </summary>
        /// <param name="code"></param>
        /// <returns></returns>
        [HttpGet]
        public ResponseData<List<Solution_CQMSConstructSolutionApprove>> GetApproveById(string id,int edition)
        {
            ResponseData<List<Solution_CQMSConstructSolutionApprove>> res = new ResponseData<List<Solution_CQMSConstructSolutionApprove>>();

            res.successful = true;
            res.resultValue = BLL.CQMSConstructSolutionApproveService.getListDataForApi(id);
            return res;
        }
        [HttpGet]
        public ResponseData<Solution_CQMSConstructSolutionApprove> GetCurrApproveById(string id, string userId, int edition)
        {
            ResponseData<Solution_CQMSConstructSolutionApprove> res = new ResponseData<Solution_CQMSConstructSolutionApprove>();
            var approve = BLL.CQMSConstructSolutionApproveService.getCurrApproveForApi(id, userId, edition);
            res.successful = true;
            res.resultValue = BeanUtil.CopyOjbect<Solution_CQMSConstructSolutionApprove>(approve, true);
            if (approve != null)
            {
                res.resultValue.Edition = approve.Edition;
            }
            return res;
        }
        /// <summary>
        /// 
        /// </summary>
        public static void SaveAttachFile(string dataId, string menuId, string url)
        {
            Model.ToDoItem toDoItem = new Model.ToDoItem
            {
                MenuId = menuId,
                DataId = dataId,
                UrlStr = url,
            };
            APIUpLoadFileService.SaveAttachUrl(toDoItem);
        }
        /// <summary>
        /// 当前版次 会签人
        /// </summary>
        /// <param name="id"></param>
        /// <param name="edition"></param>
        /// <returns></returns>
        [HttpGet]
        public ResponseData<List<Solution_CQMSConstructSolutionApprove>> GetConApproveById(string id, int edition)
        {
            ResponseData<List<Solution_CQMSConstructSolutionApprove>> res = new ResponseData<List<Solution_CQMSConstructSolutionApprove>>();
            res.successful = true;
            res.resultValue = BLL.CQMSConstructSolutionApproveService.getConApproveForApi(id, edition);
            return res;
        }
        [HttpPost]
        public ResponseData<string> AddApprove([FromBody]Model.Solution_CQMSConstructSolutionApprove approve)
        {
            ResponseData<string> res = new ResponseData<string>();
            try
            {
                Model.Solution_CQMSConstructSolution CheckControl = new Model.Solution_CQMSConstructSolution();
                CheckControl.ConstructSolutionId = approve.ConstructSolutionId;
                CheckControl.State = approve.ApproveType;
                BLL.CQMSConstructSolutionService.UpdateConstructSolutionForApi(CheckControl);
                BLL.CQMSConstructSolutionApproveService.AddConstructSolutionApprove(approve);
                res.successful = true;

            }
            catch (Exception e)
            {
                res.resultHint = e.StackTrace;
                res.successful = false;
            }
            return res;

        }
        [HttpPost]
        public ResponseData<string> UpdateApprove([FromBody]Solution_CQMSConstructSolutionApprove approve)
        {
            ResponseData<string> res = new ResponseData<string>();
            try
            {
                SaveAttachFile(approve.ConstructSolutionApproveId, BLL.Const.CQMSConstructSolutionMenuId, approve.AttachUrl);
                // Model.Check_CheckControlApprove approve1 = BLL.CheckControlApproveService.GetCheckControlApproveByCheckControlId(approve.CheckControlCode);
                approve.ApproveDate = DateTime.Now;
                approve = BLL.CQMSConstructSolutionApproveService.UpdateConstructSolutionApproveForApi(approve);
                BLL.CQMSConstructSolutionApproveService.PushMessageToNextMan(approve.ConstructSolutionId);//推送待办
                var approves = BLL.CQMSConstructSolutionApproveService.getConApprovesForApi(approve.ConstructSolutionId, approve.Edition.Value);
                Solution_CQMSConstructSolutionApprove first = null;
                bool allAgree = true;
                bool hasFinish = true;
                foreach (Solution_CQMSConstructSolutionApprove a in approves)
                {
                    if (a.ApproveType == "1")
                    {
                        first = a;
                    }
                    if (a.ApproveType == "2")
                    {
                        approve.ConstructSolutionId = a.ConstructSolutionId;
                        if (a.IsAgree.HasValue && !a.IsAgree.Value)
                        {
                            allAgree = false;
                        }
                        if (!a.IsAgree.HasValue)
                        {
                            hasFinish = false;
                        }
                    }
                }

                if (!allAgree)
                {
                    if (first != null && hasFinish)
                    {
                        Solution_CQMSConstructSolutionApprove approveReEdit = new Solution_CQMSConstructSolutionApprove();
                        approveReEdit.ApproveType = "0";
                        approveReEdit.ApproveMan = first.ApproveMan.Split('$')[0];
                        approveReEdit.ConstructSolutionId = first.ConstructSolutionId;
                        approveReEdit.Edition = first.Edition;
                        BLL.CQMSConstructSolutionApproveService.AddConstructSolutionApproveForApi(approveReEdit);
                        Model.Solution_CQMSConstructSolution CheckControl = new Model.Solution_CQMSConstructSolution();
                        CheckControl.ConstructSolutionId = approveReEdit.ConstructSolutionId;
                        CheckControl.State = approveReEdit.ApproveType;
                        BLL.CQMSConstructSolutionService.UpdateConstructSolutionForApi(CheckControl);
                    }
                }
                else
                {
                    if (hasFinish)
                    {
                        Solution_CQMSConstructSolutionApprove approveReEdit = new Solution_CQMSConstructSolutionApprove();
                        approveReEdit.ApproveType = "3";
                        approveReEdit.ConstructSolutionId = approve.ConstructSolutionId;
                        approveReEdit.Edition = approve.Edition;
                        BLL.CQMSConstructSolutionApproveService.AddConstructSolutionApproveForApi(approveReEdit);
                        Model.Solution_CQMSConstructSolution CheckControl = new Model.Solution_CQMSConstructSolution();
                        CheckControl.ConstructSolutionId = approveReEdit.ConstructSolutionId;
                        CheckControl.State = approveReEdit.ApproveType;
                        BLL.CQMSConstructSolutionService.UpdateConstructSolutionForApi(CheckControl);
                    }
                }
                if (first != null)
                {
                    Solution_CQMSConstructSolutionApprove approveS = new Solution_CQMSConstructSolutionApprove();
                    approveS.ApproveType = "S";
                    approveS.ApproveMan = first.ApproveMan.Split('$')[0];
                    approveS.ConstructSolutionId = first.ConstructSolutionId;
                    approveS.Edition = first.Edition;
                    BLL.CQMSConstructSolutionApproveService.AddConstructSolutionApproveForApi(approveS);
                }
                res.successful = true;

            }
            catch (Exception e)
            {
                res.resultHint = e.StackTrace;
                res.successful = false;
            }
            return res;

        }
        [HttpGet]
        public ResponseData<string> see(string dataId, string userId)
        {
            ResponseData<string> res = new ResponseData<string>();
            res.successful = true;
            BLL.CQMSConstructSolutionApproveService.See(dataId, userId);
            return res;
        }
    }
}