using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using AMESCoreStudio.WebApi.Models.AMES;
using AMESCoreStudio.CommonTools.Result;
using AMESCoreStudio.WebApi.DTO.AMES;
// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860

namespace AMESCoreStudio.WebApi.Controllers.AMES
{
    [Route("api/[controller]")]
    [ApiController]
    public class WipMACController : ControllerBase
    {
        private readonly AMESContext _context;

        /// <summary>
        /// 工單MAC資料檔
        /// </summary>
        /// <param name="context"></param>
        public WipMACController(AMESContext context)
        {
            _context = context;
        }

        /// <summary>
        /// 工單投產纪錄資料文件
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public async Task<ActionResult<IEnumerable<WipMAC>>> GetWipMAC()
        {
            IQueryable<WipMAC> q = _context.WipMACs;
            q = q.OrderBy(p => p.WipNO);
            var WipMAC = await q.ToListAsync();
            return WipMAC;
        }

        /// <summary>
        /// 工單MAC資料檔 By 工單號碼
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpGet("{id}")]
        public async Task<ActionResult<IEnumerable<WipMAC>>> GetWipMAC(string id)
        {
            IQueryable<WipMAC> q = _context.WipMACs;
            var WipMAC = await q.Where(p => p.WipNO == id).ToListAsync();

            return WipMAC;
        }

        /// <summary>
        /// 確認MAC區間是否有重複
        /// </summary>
        /// <param name="startNo">MAC起</param>
        /// <param name="endNo">MAC迄</param>
        /// <returns></returns>
        [HttpGet("CheckMAC/{startNo}/{endNo}")]
        public async Task<ResultModel<WipMAC>> GetCheckMAC(string startNo, string endNo)
        {
            ResultModel<WipMAC> result = new ResultModel<WipMAC>();
            result.Success = true;
            result.Msg = "OK";
            // 前綴
            string Title = startNo.ToUpper().Substring(0, 6);
            string start = startNo.Substring(startNo.Length - 6, 6).ToUpper();
            string end = endNo.Substring(endNo.Length - 6, 6).ToUpper();

            IQueryable<WipMAC> q = _context.WipMACs.Where(w => w.Title == Title);
            if (q.Count() != 0)
            {
                var WipMAC = await q.Where(w => (string.Compare(w.StartNO, start) <= 0 && string.Compare(start, w.EndNO) <= 0)
                                      || (string.Compare(w.StartNO, end) <= 0 && string.Compare(end, w.EndNO) <= 0)).ToListAsync();

                if (WipMAC.Count != 0)
                {
                    result.Success = false;
                    result.Msg = "有重複MAC區間";
                }
            }
            return result;
        }


        [HttpPost]
        public async Task<ResultModel<WipMAC>> PostWipMAC([FromBody] WipMAC WipMAC)
        {
            ResultModel<WipMAC> result = new ResultModel<WipMAC>();
            _context.WipMACs.Add(WipMAC);
            try
            {
                await _context.SaveChangesAsync();
                result.Success = true;
                result.Msg = "OK";
            }
            catch (Exception ex)
            {
                result.Success = false;
                result.Msg = ex.InnerException.Message;
            }
            return result;
        }

        // PUT api/<WipMACController>/5
        [HttpPut]
        public async Task<ResultModel<WipMAC>> PutWipMAC(WipMAC wipMAC)
        {
            ResultModel<WipMAC> result = new ResultModel<WipMAC>();

            var getWipMAC = GetWipMAC(wipMAC.WipNO).Result.Value.FirstOrDefault();
            if (getWipMAC != null)
            {
                _context.WipMACs.Remove(getWipMAC);
                _context.WipMACs.Add(wipMAC);
            }
            else
            {
                _context.WipMACs.Add(wipMAC);
            }
            try
            {
                await _context.SaveChangesAsync();
                result.Success = true;
                result.Msg = "OK";
            }
            catch (Exception ex)
            {
                result.Success = false;
                result.Msg = ex.InnerException.Message;
            }
            return result;
        }

        // DELETE api/<WipMACController>/5
        [HttpDelete("{id}")]
        public void Delete(int id)
        {
        }
    }
}