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

namespace AMESCoreStudio.Web.Controllers
{
    public class KCSController : Controller
    {
        private readonly ILogger<KCSController> _logger;
        public readonly IKCS _kcsApi;

        public KCSController(ILogger<KCSController> logger, IKCS kcsApi)
        {
            _logger = logger;
            _kcsApi = kcsApi;
        }

        private async Task GetMaxClassGroup()
        {
            var result = await _kcsApi.GetMACInfo("DESC");

            if (result.Count == 0)
            {
                ViewBag.MaxClassGroup = "";
            }
            else
            {
                ViewBag.MaxClassGroup = result[0].ClassGroup;
            }

        }

        private async Task GetItemType()
        {
            var ItemTypeList = new List<SelectListItem>();

            ItemTypeList.Add(new SelectListItem("一般組件", "NP"));

            ItemTypeList.Add(new SelectListItem("KeyParts", "KP"));

            ItemTypeList.Add(new SelectListItem("組件確認", "CO"));

            ItemTypeList.Add(new SelectListItem("測試配備", "TQ"));

            ItemTypeList.Add(new SelectListItem("系統組件", "NI"));

            ItemTypeList.Add(new SelectListItem("前段組件", "A"));

            ItemTypeList.Add(new SelectListItem("後段組件", "B"));

            ViewBag.ItemTypeList = ItemTypeList;
        }

        private async Task GetSNInterval()
        {
            var SNIntervalList = new List<SelectListItem>();

            SNIntervalList.Add(new SelectListItem("不管控", "N"));

            SNIntervalList.Add(new SelectListItem("管控", "Y"));

            ViewBag.SNIntervalList = SNIntervalList;
        }

        #region KCS001 MAC資料維護相關

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

        //新增頁面
        public async Task<IActionResult> KCS001C()
        {
            await GetMaxClassGroup();

            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> KCS001UAsync(string id)
        {
            var result = await _kcsApi.GetMACInfo(id);

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

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

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> KCS001CSaveAsync(MACInfo model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _kcsApi.PostMACInfo(JsonConvert.SerializeObject(model));


                if (result.Success)
                {
                    var _msg = "添加成功!";
                    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);
                    }
                }
            }
            return View("KCS001C", model);
        }

        public async Task<IActionResult> KCS001USaveAsync(MACInfo model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _kcsApi.PutMACInfo(model.Class + "," + model.ClassGroup, JsonConvert.SerializeObject(model));

                if (result.Success)
                {
                    var _msg = "修改成功!";
                    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);
                    }
                }
            }
            return View("KCS001U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetMACInfoesAsync(int page = 1, int limit = 10)
        {
            var result_total = await _kcsApi.GetMACInfoes(0, limit);
            var result = await _kcsApi.GetMACInfoes(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 KCS002序號料號維護相關

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

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

        //修改页面
        [HttpGet]
        public async Task<IActionResult> KCS002UAsync(string id)
        {
            var result = await _kcsApi.GetPartMap(id);

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

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

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> KCS002CSaveAsync(PartMap model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _kcsApi.PostPartMap(JsonConvert.SerializeObject(model));


                if (result.Success)
                {
                    var _msg = "添加成功!";
                    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);
                    }
                }
            }
            return View("KCS002C", model);
        }

        public async Task<IActionResult> KCS002USaveAsync(PartMap model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _kcsApi.PutPartMap(model.CorpSN, JsonConvert.SerializeObject(model));

                if (result.Success)
                {
                    var _msg = "修改成功!";
                    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);
                    }
                }
            }
            return View("KCS002U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetPartMapsAsync(int page = 1, int limit = 10)
        {
            var result_total = await _kcsApi.GetPartMaps(0, limit);
            var result = await _kcsApi.GetPartMaps(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 KCS004組件料號序號維護相關

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

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

        //修改页面
        [HttpGet]
        public async Task<IActionResult> KCS004UAsync(string id)
        {
            var result = await _kcsApi.GetKPLink(id);

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

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

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> KCS004CSaveAsync(KPLink model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _kcsApi.PostKPLink(JsonConvert.SerializeObject(model));


                if (result.Success)
                {
                    var _msg = "添加成功!";
                    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);
                    }
                }
            }
            return View("KCS004C", model);
        }

        public async Task<IActionResult> KCS004USaveAsync(KPLink model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _kcsApi.PutKPLink(model.KeyPartSn, JsonConvert.SerializeObject(model));

                if (result.Success)
                {
                    var _msg = "修改成功!";
                    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);
                    }
                }
            }
            return View("KCS004U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetKPLinksAsync(int page = 1, int limit = 10)
        {
            var result_total = await _kcsApi.GetKPLinks(0, limit);
            var result = await _kcsApi.GetKPLinks(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 KCS006組件類別資料維護相關

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

        //新增頁面
        public async Task<IActionResult> KCS006C()
        {
            await GetItemType();
            await GetSNInterval();

            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> KCS006UAsync(string id)
        {
            await GetItemType();
            await GetSNInterval();

            var result = await _kcsApi.GetItems(id);

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

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

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> KCS006CSaveAsync(Items model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _kcsApi.PostItems(JsonConvert.SerializeObject(model));


                if (result.Success)
                {
                    var _msg = "添加成功!";
                    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);
                    }
                }
            }
            return View("KCS006C", model);
        }

        public async Task<IActionResult> KCS006USaveAsync(Items model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _kcsApi.PutItems(model.ItemNo, JsonConvert.SerializeObject(model));

                if (result.Success)
                {
                    var _msg = "修改成功!";
                    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);
                    }
                }
            }
            return View("KCS006U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetItemsAsync(int page = 1, int limit = 10)
        {
            var result_total = await _kcsApi.GetItems(0, limit);
            var result = await _kcsApi.GetItems(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
    }
}