using System.Collections.Generic;
using WebApiClient;
using WebApiClient.Attributes;
using AMESCoreStudio.WebApi;
using Microsoft.AspNetCore.Mvc;
using AMESCoreStudio.WebApi.Models.AMES;
using AMESCoreStudio.CommonTools.Result;
using AMESCoreStudio.WebApi.DTO.AMES;

namespace AMESCoreStudio.Web
{
    [JsonReturn]
    public interface IPCB : IHttpApi
    {
        #region FQC001 檢驗類別維護
        /// <summary>
        /// 新增檢驗類別維護
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/QcGroup")]
        ITask<ResultModel<QcGroup>> PostQcGroup([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新檢驗類別維護
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/QcGroup")]
        ITask<ResultModel<QcGroup>> PutQcGroup([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除檢驗類別維護
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/QcGroup/{id}")]
        ITask<ResultModel<string>> DeleteQcGroup(int id);

        /// <summary>
        /// 查詢檢驗類別維護
        /// </summary>
        /// <param name="page">頁數</param>
        /// <param name="limit"></param>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/QcGroup/QcGroupQuery")]
        ITask<ResultModel<QcGroup>> GetQcGroupQuery(int page = 0, int limit = 10);

        /// <summary>
        /// 查詢檢驗類別維護 ID
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/QcGroup/{id}")]
        ITask<QcGroup> GetQcGroup(int id);
        #endregion

        #region FQC002 檢驗項目維護
        /// <summary>
        /// 新增檢驗項目維護
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/QcItem")]
        ITask<ResultModel<QcItem>> PostQcItem([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新檢驗項目維護
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/QcItem")]
        ITask<ResultModel<QcItem>> PutQcItem([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除檢驗項目維護
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/QcItem/{id}")]
        ITask<ResultModel<string>> DeleteQcItem(int id);

        /// <summary>
        /// 查詢檢驗項目維護
        /// </summary>
        /// <param name="groupID">檢驗類別ID</param>
        /// <param name="page">頁數</param>
        /// <param name="limit">比數</param>
        /// <param name="itemNo">料號</param>
        /// <param name="wipNo">工單號碼</param>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/QcItem/QcItemQuery")]
        ITask<ResultModel<QcItemDto>> GetQcItemQuery(int groupID, int page, int limit, string itemNo = null, string wipNo = null);

        /// <summary>
        /// 查詢檢驗項目維護 ID
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/QcItem/{id}")]
        ITask<QcItem> GetQcItem(int id);

        /// <summary>
        /// 查詢檢驗項目維護
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/QcGroup")]
        ITask<List<QcGroup>> GetQcGroup();
        #endregion

        #region FQC003 檢驗結果維護
        /// <summary>
        /// 新增檢驗結果維護
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/FqcResult")]
        ITask<ResultModel<FqcResult>> PostFqcResult([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新檢驗結果維護
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/FqcResult")]
        ITask<ResultModel<FqcResult>> PutFqcResult([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除檢驗結果維護
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/FqcResult/{id}")]
        ITask<ResultModel<string>> DeleteFqcResult(string id);

        /// <summary>
        /// 查詢檢驗結果維護
        /// </summary>
        /// <param name="page">頁數</param>
        /// <param name="limit"></param>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/FqcResult/FqcResultQuery")]
        ITask<ResultModel<FqcResult>> GetFqcResultQuery(int page = 0, int limit = 10);

        /// <summary>
        /// 查詢檢驗結果維護 ID
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/FqcResult/{id}")]
        ITask<FqcResult> GetFqcResult(string id);
        #endregion

        #region FQC004 抽驗係數維護
        /// <summary>
        /// 新增抽驗係數維護
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/QcQuot")]
        ITask<ResultModel<QcQuot>> PostQcQuot([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新抽驗係數維護
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/QcQuot")]
        ITask<ResultModel<QcQuot>> PutQcQuot([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除抽驗係數維護
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/QcQuot/{id}")]
        ITask<ResultModel<string>> DeleteQcQuot(int id);

        /// <summary>
        /// 查詢抽驗係數維護
        /// </summary>
        /// <param name="page">頁數</param>
        /// <param name="limit"></param>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/QcQuot/QcQuotQuery")]
        ITask<ResultModel<QcQuot>> GetQcQuotQuery(int page = 0, int limit = 10);

        /// <summary>
        /// 查詢抽驗係數維護 ID
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/QcQuot/{id}")]
        ITask<QcQuot> GetQcQuot(int id);
        #endregion

        #region FQC005 抽驗標準維護
        /// <summary>
        /// 新增抽驗標準維護
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/QcCriterion")]
        ITask<ResultModel<QcCriterion>> PostQcCriterion([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新抽驗標準維護
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/QcCriterion")]
        ITask<ResultModel<QcCriterion>> PutQcCriterion([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除抽驗標準維護
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/QcCriterion/{id}")]
        ITask<ResultModel<string>> DeleteQcCriterion(int id);

        /// <summary>
        /// 查詢抽驗標準維護
        /// </summary>
        /// <param name="quotID">抽驗係數ID</param>
        /// <param name="page">頁數</param>
        /// <param name="limit"></param>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/QcCriterion/QcCriterionQuery")]
        ITask<ResultModel<QcCriterionDto>> GetQcCriterionQuery(int quotID, int page, int limit);

        /// <summary>
        /// 查詢抽驗標準維護 ID
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/QcCriterion/{id}")]
        ITask<QcCriterion> GetQcCriterion(int id);

        /// <summary>
        /// 查詢檢驗項目維護
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/QcQuot")]
        ITask<List<QcQuot>> GetQcQuot();

        /// <summary>
        /// 查詢抽驗標準 ByQuotID 
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/QcCriterion/ByQuotID/{id}")]
        ITask<List<QcCriterion>> GetQcCriterionByQuotID(int id);
        #endregion

        #region FQC006 FQC狀態維護
        /// <summary>
        /// 新增過站狀態檔
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/StatusType")]
        ITask<ResultModel<StatusType>> PostStatusType([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新過站狀態檔
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/StatusType")]
        ITask<ResultModel<StatusType>> PutStatusType([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除過站狀態檔
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/StatusType/{id}")]
        ITask<ResultModel<string>> DeleteStatusType(string id);

        /// <summary>
        /// 查詢過站狀態檔 Query
        /// </summary>
        /// <param name="page">頁數</param>
        /// <param name="limit"></param>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/StatusType/StatusTypeQuery")]
        ITask<ResultModel<StatusType>> GetStatusTypeQuery(int page = 0, int limit = 10);

        /// <summary>
        /// 查詢過站狀態檔 ID
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/StatusType/{id}")]
        ITask<StatusType> GetStatusType(string id);

        /// <summary>
        /// 過站狀態檔-List
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/StatusType")]
        ITask<List<StatusType>> GetStatusType();


        #endregion

        #region FQC007 FQC抽驗作業
        /// <summary>
        /// 新增FQC檢驗單結果
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/FqcResultMaster")]
        ITask<ResultModel<FqcResultMaster>> PostFqcResultMaster([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新FQC檢驗單結果
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/FqcResultMaster")]
        ITask<ResultModel<FqcResultMaster>> PutFqcResultMaster([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 新增FQC檢驗結果明細
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/FqcResultDetail")]
        ITask<ResultModel<FqcResultDetail>> PostFqcResultDetail([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新入庫單
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/FqcInhouseMaster")]
        ITask<ResultModel<FqcInhouseMaster>> PutFqcInhouseMaster([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 新增抽驗批退
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/QngInfo")]
        ITask<ResultModel<QngInfo>> PostQngInfo([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 查詢過站狀態檔 ID
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/FqcInhouseMaster/FqcQuery/{inhouseNo}")]
        ITask<ResultModel<FqcDto>> GetFqcQuery(string inhouseNo, int? seqid = 1);

        /// <summary>
        /// 獲取不良現象群組資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NGGroups")]
        ITask<List<NGGroup>> GetNGGroups(int page = 0, int limit = 10);

        /// <summary>
        /// 根据群組代碼獲取不良現象類別資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NGClasses/Group/{no}")]
        ITask<List<NGClass>> GetNGClassesByGroup(string no, int page = 0, int limit = 10);

        /// <summary>
        /// 不良現象-List
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NGReasons/Class/{no}")]
        ITask<List<NGReason>> GetNGReasonsByClass(string no, int page = 0, int limit = 1000);

        /// <summary>
        /// 用內部序號取BarCode資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/BarcodeInfoes/No/{id}")]
        ITask<List<BarcodeInfo>> GetBarcodeInfoesByNo(string id);

        /// <summary>
        /// 用客戶序號取BarCode資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/BarcodeInfoes/ByExtraNo/{extraNo}")]
        ITask<List<BarcodeInfo>> GetBarcodeInfoesByExtraNo(string extraNo);

        /// <summary>
        /// 用包裝箱號取BarCode資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/BarcodeInfoes/ByBoxNo/{boxNo}")]
        ITask<List<BarcodeInfo>> GetBarcodeInfoesByBoxNo(string boxNo);

        /// <summary>
        /// 用入庫單號與序號取檢驗單結果
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/FqcResultMaster/ByInhouseNo/{inhouseNo}/{seq}")]
        ITask<List<FqcResultMaster>> GetFqcResultMasterByInhouseNo(string inhouseNo, int seq);

        /// <summary>
        /// 用入庫單號與序號取檢驗單明细資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/FqcInhouseDetail/{inhouseNo}/{seq}")]
        ITask<List<FqcInhouseDetail>> GetFqcInhouseDetail(string inhouseNo, int seq);

        /// <summary>
        /// 用FQCID取檢驗結果明細
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/FqcResultDetail/{id}")]
        ITask<List<FqcResultDetail>> GetFqcResultDetail(int id);


        /// <summary>
        /// 用id取檢驗單結果
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/FqcResultMaster/{id}")]
        ITask<FqcResultMaster> GetFqcResultMaster(int id);

        /// <summary>
        /// 用id取檢驗單結果
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/FqcInhouseMaster/{inhouseNo}/{seqID}")]
        ITask<FqcInhouseMaster> GetFqcInhouseMaster(string inhouseNo, int seqID);

        /// <summary>
        /// 新增 檢驗結果上傳圖檔資料表
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/FqcResultMasterBlob")]
        ITask<ResultModel<FqcResultMasterBlob>> PostFqcResultMasterBlob([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 查詢 檢驗結果上傳圖檔資料表 By FQCID
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/FqcResultMasterBlob/ByFQCID/{id}")]
        ITask<List<FqcResultMasterBlob>> GetFqcResultMasterBlobByFqcID(int id);

        /// <summary>
        /// WipFqcItem 查詢工單綁定檢驗工項
        /// </summary>
        /// <param name="id">料號</param>
        [WebApiClient.Attributes.HttpGet("api/WipFqcItem/ByWipNo/{id}")]
        ITask<List<WipFqcItem>> GetWipFqcItemByWipNo(string id);

        /// <summary>
        /// WipFqcItem 新增工單綁定檢驗工項
        /// </summary>
        [WebApiClient.Attributes.HttpPost("api/WipFqcItem")]
        ITask<ResultModel<WipFqcItem>> PostWipFqcItem([FromBody, RawJsonContent] string model);

        /// <summary>
        /// WipFqcItem 刪除工單綁定檢驗工項
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/WipFqcItem/{id}")]
        ITask<ResultModel<string>> DeleteWipFqcItem(int id);

        /// <summary>
        /// FQC抽驗過站
        /// </summary>
        /// <param name="inhouseNo">入庫單號</param>
        /// <param name="seqID">順序</param>
        /// <param name="userID">UserID</param>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/BarCodeCheck/PassIngByFQC")]
        ITask<ResultModel<string>> PassingByFQC(string inhouseNo, int seqID, int userID);

        /// <summary>
        /// FQC 細項資料
        /// </summary>
        /// <param name="inhouseNo">入庫單號</param>
        /// <param name="seqID">順序</param>
        /// <param name="boxNo">箱號</param>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/FqcInhouseDetail/FqcInhouseDetailByFQC007V")]
        ITask<ResultModel<FqcResultDto>> FQC007V(string inhouseNo, int seqID, string boxNo);
        #endregion

        #region PCB013 鋼板量測紀錄
        /// <summary>
        /// 鋼板資料查詢
        /// </summary>
        /// <param name="steelPlateNo">鋼板編號</param>
        /// <param name="pcbPartNo">PCB板號</param>
        /// <param name="side">正背面</param>
        /// <param name="status">狀態</param>
        /// <param name="page">頁數</param>
        /// <param name="limit">筆數</param>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/SteelPlateInfo/SteelPlateInfoQuery")]
        ITask<ResultModel<SteelPlateInfoDto>> GetSteelPlateInfoQuery(string steelPlateNo = null, string pcbPartNo = null
          , string side = null, string status = null, int page = 0, int limit = 10);

        /// <summary>
        /// 新增鋼板資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/SteelPlateInfo")]
        ITask<ResultModel<SteelPlateInfo>> PostSteelPlateInfo([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新鋼板資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/SteelPlateInfo")]
        ITask<ResultModel<SteelPlateInfo>> PutSteelPlateInfo([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 查詢鋼板資料 ID
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/SteelPlateInfo/{id}")]
        ITask<SteelPlateInfo> GetSteelPlateInfo(int id);

        /// <summary>
        /// 查詢鋼板資料 By No
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/SteelPlateInfo/ByNo/{id}")]
        ITask<List<SteelPlateInfo>> GetSteelPlateInfoByNo(string id);

        /// <summary>
        /// 新增鋼板資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/SteelPlateMeasure")]
        ITask<ResultModel<SteelPlateMeasure>> PostSteelPlateMeasure([FromBody, RawJsonContent] string model);


        [WebApiClient.Attributes.HttpGet("api/SteelPlateMeasure/BySteelPlateID/{id}")]
        ITask<ResultModel<SteelPlateMeasureDto>> GetSteelPlateMeasureBySteelPlateID(int id, int page = 0, int limit = 10);
        #endregion

        #region PCB014 錫膏使用管控
        /// <summary>
        /// 錫膏資料查詢
        /// </summary>
        /// <param name="solderPasteNo">錫膏編號</param>
        /// <param name="status">狀態</param>
        /// <param name="page">頁數</param>
        /// <param name="limit">筆數</param>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/SolderPasteInfo/SolderPasteInfoQuery")]
        ITask<ResultModel<SolderPasteInfoDto>> GetSolderPasteInfoQuery(string solderPasteNo = null, string pcbPartNo = null
          , string side = null, string status = null, int page = 0, int limit = 10);

        /// <summary>
        /// 新增錫膏資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/SolderPasteInfo")]
        ITask<ResultModel<SolderPasteInfo>> PostSolderPasteInfo([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新錫膏資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/SolderPasteInfo")]
        ITask<ResultModel<SolderPasteInfo>> PutSolderPasteInfo([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 查詢錫膏資料 ID
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/SolderPasteInfo/{id}")]
        ITask<SolderPasteInfo> GetSolderPasteInfo(int id);

        /// <summary>
        /// 查詢錫膏資料 By No
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/SolderPasteInfo/ByNo/{id}")]
        ITask<List<SolderPasteInfo>> GetSolderPasteInfoByNo(string id);
        #endregion
    }
}