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;

namespace AMESCoreStudio.WebApi.Controllers.AMES
{
    /// <summary>
    /// 樣本序號取得紀錄基本資料檔Controller
    /// </summary>
    [Route("api/[controller]")]
    [ApiController]
    public class SampleSipmentSNsController : ControllerBase
    {
        private readonly AMESContext _context;

        /// <summary>
        /// 建構式
        /// </summary>
        /// <param name="context"></param>
        public SampleSipmentSNsController(AMESContext context)
        {
            _context = context;
        }

        /// <summary>
        /// 查詢樣本序號取得紀錄資料檔
        /// </summary>
        /// <returns></returns>
        // GET: api/<SampleSipmentSNController>
        [HttpGet]
        public async Task<ActionResult<IEnumerable<SampleSipmentSN>>> GetSampleSipmentSNs()
        {
            IQueryable<SampleSipmentSN> q = _context.SampleSipmentSNs;
            q = q.OrderBy(p => p.CreateDate);
            var SampleSipmentSN = await q.ToListAsync();
            return SampleSipmentSN;
        }

        /// <summary>
        /// 樣本序號取得紀錄基本資料檔 to SampleWipNo
        /// </summary>
        /// <param name="id">SampleSipmentSNID</param>
        /// <returns></returns>
        [HttpGet("{id}")]
        public async Task<ActionResult<IEnumerable<SampleSipmentSN>>> GetSampleSipmentSN(string id)
        {
            IQueryable<SampleSipmentSN> q = _context.SampleSipmentSNs;

            var SampleSipmentSN = await q.Where(p => p.SampleWipNo == id).ToListAsync();
            return SampleSipmentSN;
        }

        /// <summary>
        /// 取得樣本序號取得紀錄ByQurey
        /// </summary>
        /// <param name="itemNo">料號</param>
        /// <param name="wipNo">工單</param>
        /// <param name="userName">開單人員</param>
        /// <param name="Sdate">開單日期</param>
        /// <param name="Edate">開單日期</param>
        /// <returns></returns>
        [HttpGet("ByQurey/{itemNo}/{wipNo}/{userName}/{Sdate}/{Edate}")]
        public async Task<ActionResult<IEnumerable<SampleSipmentSN>>> GetSampleSipmentSNByQurey(string itemNo, string wipNo, string userName, string Sdate, string Edate)
        {
            IQueryable<SampleSipmentSN> q = _context.SampleSipmentSNs;
            ResultModel<string> result = new ResultModel<string>();
            if(!string.IsNullOrEmpty(itemNo) && itemNo!="*")
                q =  q.Where(p => p.ItemNo == itemNo);
            if (!string.IsNullOrEmpty(wipNo) && wipNo != "*")
                q =  q.Where(p => p.SampleWipNo == wipNo);
            if (!string.IsNullOrEmpty(userName) && userName != "*")
                q =  q.Where(p => p.CreateName == userName);


            DateTime dateValue;
            if (!string.IsNullOrEmpty(Sdate) && Sdate != "*")
            {

                if (DateTime.TryParse(Sdate, out dateValue))
                {
                    q = q.Where(p => p.CreateDate >= DateTime.Parse(Sdate));
                }
            }
            if (!string.IsNullOrEmpty(Edate) && Edate != "*")
            {
                if (DateTime.TryParse(Edate, out dateValue))
                {
                    q = q.Where(p => p.CreateDate <= DateTime.Parse(Edate));
                }

            }


            var SampleSipmentSN = await q.ToListAsync();

            return SampleSipmentSN;


        }

        /// <summary>
        /// 新增樣本序號取得紀錄資料檔
        /// </summary>
        /// <param name="SampleSipmentSN"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<ResultModel<SampleSipmentSN>> PostSampleSipmentSN([FromBody] SampleSipmentSN SampleSipmentSN)        
        {
            ResultModel<SampleSipmentSN> result = new ResultModel<SampleSipmentSN>();
            Helper helper = new Helper(_context);
            //SampleSipmentSN.SampleSipmentSNID = helper.GetIDKey("SampleSipmentSN_ID").Result;
            _context.SampleSipmentSNs.Add(SampleSipmentSN);
            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>
        /// <returns></returns>
        [HttpPut("{id}")]
        public async Task<ResultModel<SampleSipmentSN>> PutSampleSipmentSN(int id,[FromBody] SampleSipmentSN SampleSipmentSN)
        {
            ResultModel<SampleSipmentSN> result = new ResultModel<SampleSipmentSN>();
            //_context.Attach(SampleSipmentSN);
            // 指定更新某個欄位
            //_context.Entry(SampleSipmentSN).Property(p => p.SampleSipmentSNID).IsModified = true;
            _context.Entry(SampleSipmentSN).State = EntityState.Modified;

            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/<SampleSipmentSNController>/5
        [HttpDelete("{id}")]
        public void DeleteSampleSipmentSN(int id)
        {
        }
    }
}