using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using AMESCoreStudio.Web.Models;
using Newtonsoft.Json;
using AMESCoreStudio.WebApi;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc.Rendering;
using AMESCoreStudio.WebApi.Models.BAS;
using AMESCoreStudio.CommonTools.Result;

namespace AMESCoreStudio.Web.Controllers
{
    public class BASController : Controller
    {
        private readonly ILogger<BASController> _logger;
        public readonly IBAS _basApi;
        public readonly ISYS _sysApi;
        public BASController(ILogger<BASController> logger, IBAS basApi, ISYS sysApi)
        {
            _logger = logger;
            _basApi = basApi;
            _sysApi = sysApi;
        }

        #region 下拉選項

        private async Task GetFactoryList()
        {
            var result = await _basApi.GetFactoryInfoes();

            var FactoryItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                FactoryItems.Add(new SelectListItem(result[i].FactoryNameCh,  result[i].FactoryID.ToString()));
            }
            ViewBag.FactoryList = FactoryItems;
        }
        private async Task GetFactoryUnitList()
        {
            var result = await _basApi.GetFactoryUnits();

            var UnitItems = new List<SelectListItem>();
            UnitItems.Add(new SelectListItem("全部", "0"));
            for (int i = 0; i < result.Count; i++)
            {
                UnitItems.Add(new SelectListItem(result[i].UnitName, result[i].UnitNo.ToString()));
            }
            ViewBag.FactoryUnit = UnitItems;
        }
        private async Task GetLineInfoList()
        {
            var result = await _basApi.GetLineInfoes();

            var UnitItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                UnitItems.Add(new SelectListItem(result[i].LineDesc, result[i].LineID.ToString()));
            }
            ViewBag.LineInfo = UnitItems;
        }
        private async Task GetDeptList()
        {
            var result = await _sysApi.GetDeptInfoes();

            var DeptItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                DeptItems.Add(new SelectListItem(result[i].DeptNo + "-" + result[i].DeptName, result[i].DeptID.ToString()));
            }
            ViewBag.DeptList = DeptItems;
        }
        private async Task GetStationTypeList()
        {
            var result = await _basApi.GetStationTypes();

            var StationTypeItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                StationTypeItems.Add(new SelectListItem(result[i].TypeNo +"-" + result[i].TypeDesc, result[i].TypeNo.ToString()));
            }
            ViewBag.StationTypeList = StationTypeItems;
        }
        private async Task GetMailGroupList()
        {
            var result = await _basApi.GetMailGroups();

            var MailGroupItems = new List<SelectListItem>();
            MailGroupItems.Add(new SelectListItem("全部", "0"));

            for (int i = 0; i < result.Count; i++)
            {
                MailGroupItems.Add(new SelectListItem( result[i].GroupDesc, result[i].GroupID.ToString()));
            }
            ViewBag.MailGroupList = MailGroupItems;
        }
        private async Task GetUserList()
        {
            var result = await _sysApi.GetUserInfoes();

            var UserItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                UserItems.Add(new SelectListItem("[" + result[i].UserNo + "]" + result[i].UserName, result[i].UserID.ToString()));
            }
            ViewBag.UserList = UserItems;
        }
        private async Task GetTestTypeList()
        {
            var result = await _basApi.GetTestTypes();

            var TestTypeItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                TestTypeItems.Add(new SelectListItem(result[i].TypeNo + "-" + result[i].TypeName, result[i].TypeNo.ToString()));
            }
            ViewBag.TestTypeList = TestTypeItems;
        }

        private async Task GetUnitList()
        {
            var result = await _basApi.GetFactoryUnits();

            var UnitItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                UnitItems.Add(new SelectListItem(result[i].UnitName, result[i].UnitNo.ToString()));
            }
            ViewBag.UnitList = UnitItems;
        }

        private async Task GetFlowRuleList()
        {
            var result = await _basApi.GetFlowRules();

            var FlowRuleItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                FlowRuleItems.Add(new SelectListItem(result[i].UnitNo + result[i].FlowRuleName, result[i].FlowRuleID.ToString()));
            }
            ViewBag.FlowRuleList = FlowRuleItems;
        }

        private async Task GetStationList()
        {
            var result = await _basApi.GetStationses();

            var StationItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                StationItems.Add(new SelectListItem(result[i].UnitNo + result[i].StationName, result[i].StationID.ToString()));
            }
            ViewBag.StationList = StationItems;
        }

        private async Task GetRuleStationList(int id)
        {
            var result = await _basApi.GetRuleStationsByFlow(id);

            var RuleStationItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                RuleStationItems.Add(new SelectListItem(result[i].Station.UnitNo + result[i].Station.StationName, result[i].RuleStationID.ToString()));
            }
            ViewBag.RuleStationList = RuleStationItems;
        }

        private async Task GetNextStationList(int id)
        {
            var result = await _basApi.GetRuleStationsByFlow(id);

            var NextStationItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                NextStationItems.Add(new SelectListItem(result[i].Station.UnitNo + result[i].Station.StationName, result[i].StationID.ToString()));
            }
            ViewBag.NextStationList = NextStationItems;
        }

        [HttpPost]
        public async Task<JsonResult> GetFlowRuleJson(string unit_no)
        {
            var result = await _basApi.GetFlowRulesByUnit(unit_no);

            var item = new List<SelectListItem>();
            item.Add(new SelectListItem("全部", "0"));
            for (int i = 0; i < result.Count; i++)
            {
                item.Add(new SelectListItem(result[i].FlowRuleName, result[i].FlowRuleID.ToString()));
            }
            //将数据Json化并传到前台视图
            return Json(new { data = item });
        }

        [HttpPost]
        public async Task<JsonResult> GetUnitLineJson(string unit_no)
        {
            var result = await _basApi.GetLineInfoByUnit(unit_no);

            var item = new List<SelectListItem>();

            for (int i = 0; i < result.Count; i++)
            {
                item.Add(new SelectListItem(result[i].LineDesc, result[i].LineID.ToString()));
            }

            if (item.Count == 0)
            {
                item.Add(new SelectListItem("N/A", ""));
            }

            //将数据Json化并传到前台视图
            return Json(new { data = item });
        }

        [HttpPost]
        public async Task<JsonResult> GetStationsJson(string unit_no)
        {
            var result = await _basApi.GetStationsByUnit(unit_no);

            var item = new List<SelectListItem>();

            for (int i = 0; i < result.Count; i++)
            {
                item.Add(new SelectListItem(result[i].StationName, result[i].StationID.ToString()));
            }

            if (item.Count == 0)
            {
                item.Add(new SelectListItem("N/A", ""));
            }

            //将数据Json化并传到前台视图
            return Json(new { data = item });
        }

        #endregion

        #region BAS001工廠资料维护相关

        public IActionResult BAS001()
        {
            return View();
        }

        //新增頁面
        public IActionResult BAS001C()
        {
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS001UAsync(int id)
        {
            var result = await _basApi.GetFactoryInfo(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS001DAsync(int id)
        {
            var result = await _basApi.DeleteFactoryInfo(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS001SaveAsync(FactoryInfo model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;
                if (model.FactoryID == 0)
                {
                    result = await _basApi.PostFactoryInfo(JsonConvert.SerializeObject(model));
                }
                else
                {
                    result = await _basApi.PutFactoryInfo(model.FactoryID, JsonConvert.SerializeObject(model));
                }

                if (!result.Success)
                {
                    var _msg = model.FactoryID == 0 ? "添加成功!" : "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            if (model.FactoryID == 0)
            {
                return View("BAS001C", model);
            }
            return View("BAS001U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetFactoryInfoesAsync()
        {
            var result = await _basApi.GetFactoryInfoes();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region BAS002模组资料维护相关

        public IActionResult BAS002()
        {
            return View();
        }

        //新增頁面
        public IActionResult BAS002C()
        {           
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS002UAsync(string id)
        {

            var result = await _basApi.GetFactoryUnit(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS002DAsync(string id)
        {
            var result = await _basApi.DeleteFactoryUnit(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,SEQ=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS002SaveAsync(FactoryUnit model)
        {

                if (ModelState.IsValid)
                {
                IResultModel result;
                if (model.SEQ == 0)
                {
                    
                    result = await _basApi.PostFactoryUnit(JsonConvert.SerializeObject(model));
                }
                else
                {
                    result = await _basApi.PutFactoryUnit(model.UnitNo, JsonConvert.SerializeObject(model));
                }

                if (!result.Success)
                {
                    var _msg = model.SEQ == 0 ? "添加成功!" : "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            if (model.SEQ == 0)
            {
                return View("BAS002C", model);
            }
            return View("BAS002U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetFactoryUnitsAsync()
        {
            var result = await _basApi.GetFactoryUnits();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region BAS003線別资料维护相关

        public async Task<IActionResult> BAS003()
        {
            await GetFactoryUnitList();
            return View();
        }
        //新增頁面
        public async Task<IActionResult> BAS003C()
        {
            await GetDeptList();
            await GetFactoryUnitList();
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS003UAsync(int id)
        {
            await GetDeptList();
            await GetFactoryUnitList();

            var result = await _basApi.GetLineInfo(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS003DAsync(int id)
        {
            var result = await _basApi.DeleteLineInfo(id);
            return Json(new Result() { success = true, msg = "" });
        }

        public async Task<IActionResult> BAS003U2Async(LineInfo model)
        {
            
            model.UpdateDate = System.DateTime.Now;
            if(model.StatusNo == "S")
                model.StatusNo = "A";
            else if (model.StatusNo == "A")
                model.StatusNo = "S";
            var result = await _basApi.PutLineInfo(model.LineID, JsonConvert.SerializeObject(model));
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS003SaveAsync(LineInfo model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;
                if (model.LineID == 0)
                {
                    result = await _basApi.PostLineInfo(JsonConvert.SerializeObject(model));
                }
                else
                {
                    result = await _basApi.PutLineInfo(model.LineID, JsonConvert.SerializeObject(model));
                }

                if (!result.Success)
                {
                    var _msg = model.LineID == 0 ? "添加成功!" : "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            if (model.LineID == 0)
            {
                return View("BAS003C", model);
            }
            return View("BAS003U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetLineInfoesAsync()
        {
            var result = await _basApi.GetLineInfoes();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetLineInfoByUnitAsync(string ID)
        {
            if (ID is null)
                ID = "0";

            var result = await _basApi.GetLineInfoByUnit(ID);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }
        #endregion

        #region BA005班別维护相关

        public async Task<IActionResult> BAS005()
        {
            await GetFactoryUnitList();
            return View();
        }

        //新增頁面
        public async Task<IActionResult> BAS005C()
        {
            await GetFactoryUnitList();
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS005UAsync(int id)
        {

            await GetFactoryUnitList();
            var result = await _basApi.GetClassInfo(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS005DAsync(int id)
        {
            var result = await _basApi.DeleteClassInfo(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS005SaveAsync(ClassInfo model)
        {

            if (ModelState.IsValid)
            {
                IResultModel result;
                if (model.ClassID == 0)
                {
                    result = await _basApi.PostClassInfo(JsonConvert.SerializeObject(model));
                }
                else
                {
                    result = await _basApi.PutClassInfo(model.ClassID, JsonConvert.SerializeObject(model));
                }

                if (!result.Success)
                {
                    var _msg = model.ClassID == 0 ? "添加成功!" : "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            if (model.ClassID == 0)
            {
                return View("BAS005C", model);
            }
            return View("BAS005U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetClassInfoesAsync()
        {
            var result = await _basApi.GetClassInfoes();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }



        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetClassInfoByUnitAsync(string ID)
        {
            if (ID is null)
                ID = "0";
  
            var result = await _basApi.GetClassInfoByUnit(ID);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region BA006時段資料檔维护相关

        public IActionResult BAS006()
        {
            return View();
        }

        //新增頁面
        public IActionResult BAS006C()
        {
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS006UAsync(int id)
        {

            var result = await _basApi.GetTimeSegment(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS006DAsync(int id)
        {
            var result = await _basApi.DeleteTimeSegment(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS006SaveAsync(TimeSegment model)
        {

            if (ModelState.IsValid)
            {
                IResultModel result;
                if (model.SegmentID == 0)
                {
                    result = await _basApi.PostTimeSegment(JsonConvert.SerializeObject(model));
                }
                else
                {
                    result = await _basApi.PutTimeSegment(model.SegmentID, JsonConvert.SerializeObject(model));
                }

                if (!result.Success)
                {
                    var _msg = model.SegmentID == 0 ? "添加成功!" : "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            if (model.SegmentID == 0)
            {
                return View("BAS006C", model);
            }
            return View("BAS006U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetTimeSegmentsAsync()
        {
            var result = await _basApi.GetTimeSegments();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region BAS007站別類別维护相关

        public IActionResult BAS007()
        {
            return View();
        }

        //新增頁面
        public IActionResult BAS007C()
        {
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS007UAsync(string id)
        {

            var result = await _basApi.GetStationType(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS007DAsync(string id)
        {
            var result = await _basApi.DeleteStationType(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS007SaveAsync(StationType model)
        {

            if (ModelState.IsValid)
            {
                IResultModel result;
                if (model.SysType is null)
                {
                    result = await _basApi.PostStationType(JsonConvert.SerializeObject(model));
                }
                else
                {
                    result = await _basApi.PutStationType(model.TypeNo, JsonConvert.SerializeObject(model));
                }

                if (!result.Success)
                {
                    var _msg = model.SysType is null ? "添加成功!" : "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            if (model.SysType is null)
            {
                return View("BAS007C", model);
            }
            return View("BAS007U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetStationTypesAsync()
        {
            var result = await _basApi.GetStationTypes();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region BAS008站別资料维护相关

        public async Task<IActionResult> BAS008()
        {
            await GetFactoryUnitList();
            return View();
        }

        //新增頁面
        public async Task<IActionResult> BAS008C()
        {
            await GetStationTypeList();
            await GetFactoryUnitList();
            await GetTestTypeList();

            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS008UAsync(int id)
        {

            await GetStationTypeList();
            await GetFactoryUnitList();
            await GetTestTypeList();

            var result = await _basApi.GetStations(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS008DAsync(int id)
        {
            var result = await _basApi.DeleteStations(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS008SaveAsync(Stations model)
        {

            if (ModelState.IsValid)
            if (true)//SHANI?
            {
                IResultModel result;
                if (model.StationID==0)
                {
                    result = await _basApi.PostStations(JsonConvert.SerializeObject(model));
                }
                else
                {
                    result = await _basApi.PutStations(model.StationID, JsonConvert.SerializeObject(model));
                }

                if (!result.Success)
                {
                    var _msg = model.StationID == 0 ? "添加成功!" : "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            if (model.StationID == 0)
            {
                return View("BAS008C", model);
            }
            return View("BAS008U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetStationsesAsync()
        {
            var result = await _basApi.GetStationses();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetStationsByUnitAsync(string ID)
        {
            if (ID is null)
                ID = "0";

            var result = await _basApi.GetStationsByUnit(ID);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region BAS009流程資料維護相關

        public async Task<IActionResult> BAS009()
        {
            await GetUnitList();

            return View();
        }

        //新增頁面
        public async Task<IActionResult> BAS009C(string id)
        {
            await GetUnitList();

            var model = new FlowRule();
            if (id != null)
            {
                if (id != "")
                {
                    model.UnitNo = id;
                }
            }

            return View(model);
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS009UAsync(int id)
        {
            await GetUnitList();

            var result = await _basApi.GetFlowRule(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS009DAsync(int id)
        {
            var result = await _basApi.DeleteFlowRule(id);
            return Json(new Result() { success = true, msg = "" });
        }

        public async Task<IActionResult> BAS009DAllAsync(int[] ids)
        {
            if (ids.Length > 0)
            {
                var result = await _basApi.DeleteFlowRule(ids[0]);
                for (int i = 1; i < ids.Length; i++)
                {
                    result = await _basApi.DeleteFlowRule(ids[i]);
                }

                return Json(new Result() { success = true, msg = "" });
            }
            else
            {
                return Json(new Result() { success = false, msg = "" });
            }

        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS009SaveAsync(FlowRule model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;
                if (model.FlowRuleID == 0)
                {
                    result = await _basApi.PostFlowRule(JsonConvert.SerializeObject(model));
                }
                else
                {
                    result = await _basApi.PutFlowRule(model.FlowRuleID, JsonConvert.SerializeObject(model));
                }

                if (!result.Success)
                {
                    var _msg = model.FlowRuleID == 0 ? "添加成功!" : "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            if (model.FlowRuleID == 0)
            {
                return View("BAS009C", model);
            }
            return View("BAS009U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetFlowRulesAsync()
        {
            var result = await _basApi.GetFlowRules();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetFlowRulesByUnitAsync(string unitNo)
        {
            if (unitNo == null)
            {
                unitNo = "*";
            }
            var result = await _basApi.GetFlowRulesByUnit(unitNo);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region BAS010流程站別維護相關

        public async Task<IActionResult> BAS010()
        {
            await GetUnitList();
            await GetFlowRuleList();

            return View();
        }

        //新增頁面
        public async Task<IActionResult> BAS010C(int id)
        {
            await GetFlowRuleList();
            await GetStationList();

            ViewBag.FlowRuleID = id;

            var model = new RuleStation();
            if (id > 0)
            {
                model.FlowRuleID = id;
            }

            return View(model);
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS010UAsync(int id)
        {
            await GetFlowRuleList();
            await GetStationList();

            var result = await _basApi.GetRuleStation(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS010DAsync(int id)
        {
            var result = await _basApi.DeleteRuleStation(id);
            return Json(new Result() { success = true, msg = "" });
        }

        public async Task<IActionResult> BAS010DAllAsync(int[] ids)
        {
            if (ids.Length > 0)
            {
                var result = await _basApi.DeleteRuleStation(ids[0]);
                for (int i = 1; i < ids.Length; i++)
                {
                    result = await _basApi.DeleteRuleStation(ids[i]);
                }

                return Json(new Result() { success = true, msg = "" });
            }
            else
            {
                return Json(new Result() { success = false, msg = "" });
            }

        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS010SaveAsync(RuleStation model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;
                if (model.RuleStationID == 0)
                {
                    result = await _basApi.PostRuleStation(JsonConvert.SerializeObject(model));
                }
                else
                {
                    result = await _basApi.PutRuleStation(model.RuleStationID, JsonConvert.SerializeObject(model));
                }

                if (!result.Success)
                {
                    var _msg = model.RuleStationID == 0 ? "添加成功!" : "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            if (model.RuleStationID == 0)
            {
                return View("BAS010C", model);
            }
            return View("BAS010U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetRuleStationsAsync()
        {
            var result = await _basApi.GetRuleStations();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetRuleStationsByFlowAsync(int flowId, int page = 1, int limit = 10)
        {
            var result_total = await _basApi.GetRuleStationsByFlow(flowId, 0, limit);

            var result = await _basApi.GetRuleStationsByFlow(flowId, page, limit);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result_total.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region BAS011流程站別規則維護相關

        public async Task<IActionResult> BAS011()
        {
            await GetFlowRuleList();

            return View();
        }

        //新增頁面
        public async Task<IActionResult> BAS011C(int id)
        {
            await GetFlowRuleList();
            await GetRuleStationList(id);
            await GetNextStationList(id);

            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS011UAsync(int id)
        {
            await GetFlowRuleList();
            var result2 = await _basApi.GetRuleStation(id);
            int flowId = result2[0].FlowRuleID;
            await GetRuleStationList(flowId);
            await GetNextStationList(flowId);

            var result = await _basApi.GetRules(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS011DAsync(int id)
        {
            var result = await _basApi.DeleteRules(id);
            return Json(new Result() { success = true, msg = "" });
        }

        public async Task<IActionResult> BAS011DAllAsync(int[] ids)
        {
            if (ids.Length > 0)
            {
                var result = await _basApi.DeleteRules(ids[0]);
                for (int i = 1; i < ids.Length; i++)
                {
                    result = await _basApi.DeleteRules(ids[i]);
                }

                return Json(new Result() { success = true, msg = "" });
            }
            else
            {
                return Json(new Result() { success = false, msg = "" });
            }

        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS011SaveAsync(Rules model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;
                if (model.CreateDate == System.DateTime.MinValue)
                {
                    result = await _basApi.PostRules(JsonConvert.SerializeObject(model));
                }
                else
                {
                    result = await _basApi.PutRules(model.RuleStationID, JsonConvert.SerializeObject(model));
                }

                if (!result.Success)
                {
                    var _msg = model.CreateDate == System.DateTime.MinValue ? "添加成功!" : "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            if (model.CreateDate == System.DateTime.MinValue)
            {
                return View("BAS011C", model);
            }
            return View("BAS011U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetRulesesAsync()
        {
            var result = await _basApi.GetRuleses();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetRulesesByFlowAsync(int flowId)
        {
            var result = await _basApi.GetRulesesByFlow(flowId);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region BAS014責任單位资料维护相关

        public IActionResult BAS014()
        {
            return View();
        }

        //新增頁面
        public IActionResult BAS014C()
        {
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS014UAsync(int id)
        {

            var result = await _basApi.GetRepairResponsibleUnits(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS014DAsync(int id)
        {
            var result = await _basApi.DeleteRepairResponsibleUnits(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS014SaveAsync(RepairResponsibleUnits model)
        {

            if (ModelState.IsValid)
            {
                IResultModel result;
                if (model.RRID == 0)
                {
                    result = await _basApi.PostRepairResponsibleUnits(JsonConvert.SerializeObject(model));
                }
                else
                {
                    result = await _basApi.PutRepairResponsibleUnits(model.RRID, JsonConvert.SerializeObject(model));
                }

                if (!result.Success)
                {
                    var _msg = model.RRID == 0 ? "添加成功!" : "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            if (model.RRID == 0)
            {
                return View("BAS014C", model);
            }
            return View("BAS014U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetRepairResponsibleUnitsesAsync()
        {
            var result = await _basApi.GetRepairResponsibleUnitses();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region BAS015Mail群組類別维护相关

        public IActionResult BAS015()
        {
            return View();
        }

        //新增頁面
        public IActionResult BAS015C()
        {
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS015UAsync(int id)
        {

            var result = await _basApi.GetMailGroup(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS015DAsync(int id)
        {
            var result = await _basApi.DeleteMailGroup(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS015SaveAsync(MailGroup model)
        {

            if (ModelState.IsValid)
            {
                IResultModel result;
                if (model.GroupID == 0)
                {
                    result = await _basApi.PostMailGroup(JsonConvert.SerializeObject(model));
                }
                else
                {
                    result = await _basApi.PutMailGroup(model.GroupID, JsonConvert.SerializeObject(model));
                }

                if (!result.Success)
                {
                    var _msg = model.GroupID == 0 ? "添加成功!" : "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            if (model.GroupID == 0)
            {
                return View("BAS015C", model);
            }
            return View("BAS015U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetMailGroupsAsync()
        {
            var result = await _basApi.GetMailGroups();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region BAS016Mail群組资料维护相关

        public async Task<IActionResult> BAS016()
        {
            await GetMailGroupList();
            return View();
        }

        //新增頁面
        public async Task<IActionResult> BAS016C()
        {
            await GetMailGroupList();
            await GetUserList();
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS016UAsync(int id)
        {
            await GetMailGroupList();
            await GetUserList();

            var result = await _basApi.GetMailGroupDetail(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS016DAsync(int id)
        {
            var result = await _basApi.DeleteMailGroupDetail(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS016SaveAsync(MailGroupDetail model)
        {

            if (ModelState.IsValid)
            {
                IResultModel result;
                if (model.MailID == 0)
                {
                    result = await _basApi.PostMailGroupDetail(JsonConvert.SerializeObject(model));
                }
                else
                {
                    result = await _basApi.PutMailGroupDetail(model.MailID, JsonConvert.SerializeObject(model));
                }

                if (!result.Success)
                {
                    var _msg = model.MailID == 0 ? "添加成功!" : "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            if (model.MailID == 0)
            {
                return View("BAS016C", model);
            }
            return View("BAS016U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetMailGroupDetailsAsync()
        {
            var result = await _basApi.GetMailGroupDetails();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        //[ResponseCache(Duration = 0)]
        //[HttpGet]
        //public async Task<IActionResult> GetMailGroupDetailByGroupAsync(string groupID)
        //{
        //    if (groupID == null)
        //        groupID = "0";
        //    var aa = int.Parse(groupID);
        //    var result = await _basApi.GetMailGroupDetailByGroup(aa);

        //    if (result.Count > 0)
        //    {
        //        return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
        //    }

        //    return Json(new Table() { count = 0, data = null });
        //}


        //[ResponseCache(Duration = 0)]
        //[HttpGet]
        //public async Task<IActionResult> GetMailGroupByGIDAsync(string groupID)
        //{
        //    if (groupID == null)
        //        groupID = "0";
        //    var aa = int.Parse(groupID);
        //    var result = await _basApi.GetMailGroupDetailByGroup(aa);

        //    if (result.Count > 0)
        //    {
        //        return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
        //    }

        //    return Json(new Table() { count = 0, data = null });
        //}

        public async Task<IActionResult> GetMailDetailByGIdAsync(string ID)
        {
            if (ID is null)
                ID = "0";
            var IDD = int.Parse(ID);
            var result = await _basApi.GetMailGroupDetailByGroup(IDD);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }
        #endregion
    }
}