using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using AMESCoreStudio.WebApi;
using AMESCoreStudio.WebApi.Models.AMES;
using AMESCoreStudio.CommonTools.Result;

namespace AMESCoreStudio.WebApi.Controllers.AMES
{
    /// <summary>
    /// 料號對應工項資料檔
    /// </summary>
    [Route("api/[controller]")]
    [ApiController]
    public class MaterialFqcItemController : ControllerBase
    {
        private readonly AMESContext _context;

        public MaterialFqcItemController(AMESContext context)
        {
            _context = context;
        }

        // GET: api/MaterialFqcItem
        [HttpGet]
        public async Task<ActionResult<IEnumerable<MaterialFqcItem>>> GetMaterialFqcItems()
        {
            return await _context.MaterialFqcItems.ToListAsync();
        }

        // GET: api/MaterialFqcItem/5
        [HttpGet("{id}")]
        public async Task<ActionResult<MaterialFqcItem>> GetMaterialFqcItem(int id)
        {
            var materialFqcItem = await _context.MaterialFqcItems.FindAsync(id);

            if (materialFqcItem == null)
            {
                return NotFound();
            }

            return materialFqcItem;
        }

        /// <summary>
        /// 料號查詢綁定檢驗工項
        /// </summary>
        /// <param name="id">料號</param>
        /// <returns></returns>
        [HttpGet("ByitemNo/{id}")]
        public async Task<ActionResult<IEnumerable<MaterialFqcItem>>> GetMaterialFqcItemsByitemNo(string id)
        {
            var itemID = 0;
            var result = await _context.MaterialItems.Where(w => w.ItemNo == id).ToListAsync();
            if (result.Count() != 0)
                itemID = result.FirstOrDefault().ItemID;

            return await _context.MaterialFqcItems.Where(w => w.ItemID == itemID).ToListAsync();
        }

        /// <summary>
        /// 更新料號對應工項資料檔
        /// </summary>
        /// <param name="materialFqcItem"></param>
        /// <returns></returns>
        [HttpPut]
        public async Task<ResultModel<MaterialFqcItem>> PutMaterialFqcItem(MaterialFqcItem materialFqcItem)
        {
            ResultModel<MaterialFqcItem> result = new ResultModel<MaterialFqcItem>();
            _context.Entry(materialFqcItem).State = EntityState.Modified;
            materialFqcItem.UpdateDate = DateTime.Now;

            try
            {
                await _context.SaveChangesAsync();
                result.Success = true;
                result.Msg = "OK";
            }
            catch (Exception ex)
            {
                result.Success = false;
                result.Msg = ex.InnerException.Message;
            }
            return result;
        }


        /// <summary>
        /// 新增料號對應工項資料檔
        /// </summary>
        /// <param name="materialFqcItem"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<ResultModel<MaterialFqcItem>> PostMaterialFqcItem(MaterialFqcItem materialFqcItem)
        {
            ResultModel<MaterialFqcItem> result = new ResultModel<MaterialFqcItem>();
            Helper helper = new Helper(_context);
            materialFqcItem.MaterialFqcitemID = helper.GetIDKey("MATERIAL_FQCITEM_ID").Result;
            _context.MaterialFqcItems.Add(materialFqcItem);
            try
            {
                await _context.SaveChangesAsync();
                result.Success = true;
                result.Msg = "OK";
            }
            catch (Exception ex)
            {
                result.Success = false;
                result.Msg = ex.InnerException.Message;
            }
            return result;
        }

        /// <summary>
        /// 刪除料號對應工項資料檔
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpDelete("{id}")]
        public async Task<ResultModel<string>> DeleteMaterialFqcItem(int id)
        {
            ResultModel<string> result = new ResultModel<string>();
            var materialFqcItem = await _context.MaterialFqcItems.FindAsync(id);

            try
            {
                if (materialFqcItem == null)
                {
                    result.Success = false;
                    result.Msg = "找不到要刪除資料";
                }
                else
                {
                    _context.MaterialFqcItems.Remove(materialFqcItem);
                    await _context.SaveChangesAsync();
                    result.Success = true;
                    result.Msg = "OK";
                }
            }
            catch (Exception ex)
            {
                result.Success = false;
                result.Msg = ex.InnerException.Message;
            }
            return result;
        }

        private bool MaterialFqcItemExists(int id)
        {
            return _context.MaterialFqcItems.Any(e => e.MaterialFqcitemID == id);
        }
    }
}