using AMESCoreStudio.CommonTools.Result;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System;
using System.Data.Common;
using System.Threading.Tasks;
using AMESCoreStudio.WebApi.Extensions;
using Microsoft.Extensions.Configuration;
using AMESCoreStudio.WebApi.DTO.AMES;
using Dapper;
using AMESCoreStudio.WebApi.Models.AMES;
using System.Data;
using System.Linq;

namespace AMESCoreStudio.WebApi.Controllers.QASRV
{
    [Route("api/[controller]")]
    [ApiController]
    public class CheckSfisKayPartController : ControllerBase
    {
        /// <summary>
        /// 查詢SFIS 有效序號 KeyParts
        /// </summary>
        /// <param name="id">KeyParts序號</param>
        /// <returns></returns>
        [Route("GetSfisKeyParts/{id}")]
        [HttpGet]
        public async Task<ResultModel<dynamic>> GetSFISKeyParts(string id)
        {
            ResultModel<dynamic> result = new ResultModel<dynamic>();
            using (ESUNContext _esun_context = new ESUNContext())
            {
                try
                {
                    result.Msg = "N";
                    string strsql = $@" SELECT * FROM SFIS.dbo.ZPDKeyPart 
                                    WHERE IsActive = 1 AND PartBarcode = @PartBarcode";

                    DynamicParameters p = new DynamicParameters();
                    p.Add("PartBarcode", id.ToUpper().Trim(), DbType.AnsiString);
                    var q = await _esun_context.Database.DapperQueryAsync<dynamic>(strsql, p);
                    if (q.Any())
                        result.Msg = "Y";

                    result.Success = true;
                }
                catch (Exception ex)
                {
                    result.Msg = ex.Message;
                    result.Success = false;
                }
            }
            return result;
        }

        /// <summary>
        /// 查詢SFIS 標準工時
        /// </summary>
        /// <param name="itemNo">工程編號</param>
        /// <param name="unitNo">生產製程</param>
        /// <param name="lineNo">線別代號</param>
        /// <param name="stationNo">作業站名稱</param>
        /// <returns></returns>
        [Route("GetWorkTime")]
        [HttpGet]
        public async Task<double> GetWorkTime(string itemNo, string unitNo, string lineNo, string stationNo)
        {
            using (ESUNContext _esun_context = new ESUNContext())
            {
                try
                {
                    string strsql = $@" SELECT CT
                                        FROM AMES_DB.dbo.JH_STANDARD_WORKTIME A , 
                                        AMES_DB.dbo.JH_LINE B , 
                                        AMES_DB.dbo.JH_STATION C , 
                                        AMES_DB.dbo.JH_FACTORY_UNIT D
                                        WHERE A.LINE_ID = B.LINE_ID
                                        AND A.STATION_ID = C.STATION_ID
                                        AND A.UNIT_NO = D.UNIT_NO
                                        AND A.ITEM_NO = @itemNo
                                        AND A.UNIT_NO = @unitNo
                                        AND B.LINE_NO = @lineNo
                                        AND C.STATION_NO = @stationNo ";

                    DynamicParameters p = new DynamicParameters();
                    p.Add("itemNo", itemNo.Trim());
                    p.Add("unitNo", unitNo.Trim());
                    p.Add("lineNo", lineNo.Trim());
                    p.Add("stationNo", stationNo.Trim());
                    var q = await _esun_context.Database.DapperQueryAsync<dynamic>(strsql, p);
                    if (q.Any())
                    {
                        var first = q.FirstOrDefault();
                        return first.CT;
                    }
                    else
                    {
                        return 2.1;
                    }
                }
                catch (Exception ex)
                {
                    return 1.1;
                }
            }
        }
    }
}