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

namespace AMESCoreStudio.Web
{
    [JsonReturn]
    public interface IREP:IHttpApi
    {
        #region REP001 前判維修輸入


        /// <summary>
        /// 根據測試不良ID獲取指定不良資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NgInfo/{id}")]
        ITask<List<NgInfo>> GetNgInfo(int id);

        /// <summary>
        /// 根據條碼獲取指定不良資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NgInfo/Barcode/{no}")]
        ITask<List<NgInfo>> GetNgInfoByBarcode(string no);

        /// <summary>
        /// 根據條碼獲取指定不良資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NgInfo/GetNgInfoByBarcode2")]
        ITask<List<NgInfo>> GetNgInfoByBarcode2(string barcodeNo,string itemNo);

        /// <summary>
        /// 根據維修狀態獲取指定不良資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NgInfo/Status/{id}")]
        ITask<List<NgInfo>> GetNgInfoByStatus(int id, int page = 0, int limit = 10);

        /// <summary>
        /// 根據維修狀態獲取指定不良資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NgInfo/GetNgInfoByStatus4REP001")]
        ITask<ResultModel<dynamic>> GetNgInfoByStatus4REP001(int status, string factoryNo, string barcodeNo, string itemNo, int page = 0, int limit = 10);

        /// <summary>
        /// 根據NG_ID獲取指定不良零件資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NgComponents/NGID/{id}")]
        ITask<List<NgComponent>> GetNgComponentByNGID(int id);

        /// <summary>
        /// 根據COMPONENT_ID獲取指定不良零件資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NgComponents/{id}")]
        ITask<List<NgComponent>> GetNgComponent(int id);

        /// <summary>
        /// 更新不良零件資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/NgComponents/{id}")]
        ITask<ResultModel<NgComponent>> PutNgComponent(int id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 新增不良零件資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/NgComponents")]
        ITask<ResultModel<NgComponent>> PostNgComponent([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 根據COMPONENT_ID獲取指定維修過程資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/RepairRecords/{id}")]
        ITask<List<RepairRecord>> GetRepairRecord(int id);

        /// <summary>
        /// 根據NG_ID獲取指定維修過程資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/RepairRecords/NG_ID/{id}")]
        ITask<List<RepairRecord>> GetRepairRecordByNgID(int id);

        /// <summary>
        /// 新增維修過程資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/RepairRecords")]
        ITask<ResultModel<RepairRecord>> PostRepairRecord([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新維修過程資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/RepairRecords/{id}")]
        ITask<ResultModel<RepairRecord>> PutRepairRecord(int id, [FromBody, RawJsonContent] string model);


        /// <summary>
        /// 根據ID獲取指定維修過程資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NgRepairs/{id}")]
        ITask<List<NgRepair>> GetNgRepair(int id);

        /// <summary>
        /// 維修進/出條碼查詢
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NgRepairs/GetRepairData4REP005")]
        ITask<ResultModel<dynamic>> GetRepairData4REP005(string stationID, string stateID, string dateStart, string dateEnd, int page, int limit);

        /// <summary>
        /// 查詢維修資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NgRepairs/GetRepairData4REP012")]
        ITask<ResultModel<dynamic>> GetRepairData4REP012(string productType, string testType, string unitNo, string lineID, string stationID, string wipNo, string itemNo, string dateStart, string dateEnd, string modelNo, string itemPN, int page, int limit);

        /// <summary>
        /// 查詢維修資料by不良代碼
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NgRepairs/GetErrorCode4REP012")]
        ITask<ResultModel<dynamic>> GetErrorCode4REP012(string productType, string testType, string unitNo, string lineID, string stationID, string wipNo, string itemNo, string dateStart, string dateEnd, string modelNo, string itemPN);

        /// <summary>
        /// 查詢維修資料by维修代碼
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NgRepairs/GetRMACode4REP012")]
        ITask<ResultModel<dynamic>> GetRMACode4REP012(string productType, string testType, string unitNo, string lineID, string stationID, string wipNo, string itemNo, string dateStart, string dateEnd, string modelNo, string itemPN);

        /// <summary>
        /// 查詢維修資料by维修代碼
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NgRepairs/GetLocation4REP012")]
        ITask<ResultModel<dynamic>> GetLocation4REP012(string productType, string testType, string unitNo, string lineID, string stationID, string wipNo, string itemNo, string dateStart, string dateEnd, string modelNo, string itemPN);

        /// <summary>
        /// 查詢維修資料by维修代碼
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NgRepairs/GetRepairResponsibleUnit4REP012")]
        ITask<ResultModel<dynamic>> GetRepairResponsibleUnit4REP012(string productType, string testType, string unitNo, string lineID, string stationID, string wipNo, string itemNo, string dateStart, string dateEnd, string modelNo, string itemPN);

        /// <summary>
        /// 查詢統計不良代碼by工單號碼
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NgRepairs/GetErrorCode4QRS018")]
        ITask<ResultModel<dynamic>> GetErrorCode4QRS018(string wipNo);

        /// <summary>
        /// 查詢統計維修代碼by工單號碼
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NgRepairs/GetRepairCode4QRS018")]
        ITask<ResultModel<dynamic>> GetRepairCode4QRS018(string wipNo);

        /// <summary>
        /// 查詢統計維修料號by工單號碼
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NgRepairs/GetRepairPartNo4QRS018")]
        ITask<ResultModel<dynamic>> GetRepairPartNo4QRS018(string wipNo);

        /// <summary>
        /// 根據工單+站別+不良代碼查詢不良條碼明細
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NgRepairs/GetErrorCodeList4QRS018")]
        ITask<ResultModel<dynamic>> GetErrorCodeList4QRS018(string wipNo, int stationID, string ngNo);

        /// <summary>
        /// 根據工單+站別+維修代碼查詢維修條碼明細
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NgRepairs/GetRepairCodeList4QRS018")]
        ITask<ResultModel<dynamic>> GetRepairCodeList4QRS018(string wipNo, int stationID, string repairNo);

        /// <summary>
        /// 根據工單+站別+料號查詢維修條碼明細
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NgRepairs/GetRepairPartNoList4QRS018")]
        ITask<ResultModel<dynamic>> GetRepairPartNoList4QRS018(string wipNo, int stationID, string partNo);

        /// <summary>
        /// 根據COMPONENT_ID獲取指定維修過程資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NgRepairs/Component/{id}")]
        ITask<List<NgRepair>> GetNgRepairByComponent(decimal id);

        /// <summary>
        /// 根據REPAIR_ID獲取指定維修图片資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NgRepairBlobs/{id}")]
        ITask<List<NgRepairBlob>> GetNgRepairBlob(decimal id);

        /// <summary>
        /// 更新不良資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/NgInfo")]
        ITask<ResultModel<NgInfo>> PutNgInfo([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 新增不良維修資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/NgRepairs")]
        ITask<ResultModel<NgRepair>> PostNgRepair([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新不良維修資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/NgRepairs/{id}")]
        ITask<ResultModel<NgRepair>> PutNgRepair(int id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 新增維修圖片資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/NgRepairBlobs")]
        ITask<ResultModel<NgRepairBlob>> PostNgRepairBlob([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除維修圖片資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/NgRepairBlobs/{id}")]
        ITask<ResultModel<NgRepairBlob>> DeleteNgRepairBlob(string id);

        #endregion

        #region 警報資料相關

        /// <summary>
        /// 新增警報資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/WipAlarms")]
        ITask<ResultModel<WipAlarm>> PostWipAlarm([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新警報資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/WipAlarms/{id}")]
        ITask<ResultModel<WipAlarm>> PutWipAlarm(string id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除警報資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/WipAlarms/{id}")]
        ITask<ResultModel<WipAlarm>> DeleteWipAlarm(string id);

        /// <summary>
        /// 根據警報ID獲取指定警報資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/WipAlarms/{id}")]
        ITask<List<WipAlarm>> GetWipAlarm(int id);

        /// <summary>
        /// 獲取全部警報資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/WipAlarms")]
        ITask<List<WipAlarm>> GetWipAlarms();

        /// <summary>
        /// 根据警報類別ID獲取警報資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/WipAlarms/Type/{id}")]
        ITask<ResultModel<WipAlarm>> GetWipAlarmsByType(int id, int page = 0, int limit = 10);

        /// <summary>
        /// 根据警報類別ID+工單號碼獲取警報資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/WipAlarms/GetWipAlarm2")]
        ITask<ResultModel<WipAlarm>> GetWipAlarm2(int alarmTypeID, string wipNO, int page = 0, int limit = 10);

        #endregion

        #region REP006 報廢轉出資料輸入

        /// <summary>
        /// 根據測試不良ID獲取指定報廢轉出資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/BarcodeQngInfoes/{id}")]
        ITask<List<BarcodeQngInfo>> GetBarcodeQngInfo(int id);

        /// <summary>
        /// 根據條碼獲取指定報廢轉出資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/BarcodeQngInfoes/Barcode/{no}")]
        ITask<List<BarcodeQngInfo>> GetBarcodeQngInfoByBarcode(string no);

        /// <summary>
        /// 更新報廢轉出資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/BarcodeQngInfoes/{id}")]
        ITask<ResultModel<BarcodeQngInfo>> PutBarcodeQngInfo(int id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 新增報廢轉出資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/BarcodeQngInfoes")]
        ITask<ResultModel<BarcodeQngInfo>> PostBarcodeQngInfo([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除報廢轉出資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/BarcodeQngInfoes/{id}")]
        ITask<ResultModel<BarcodeQngInfo>> DeleteBarcodeQngInfo(string id);

        #endregion

        /// <summary>
        /// 報廢資料查詢
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/BarcodeQngInfoes/GetQngInfoData4REP008")]
        ITask<ResultModel<dynamic>> GetQngInfoData4REP008(string unitNo, string wipNo, string itemNo, string dateStart, string dateEnd, int page, int limit);

        /// <summary>
        /// 轉出資料查詢
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/BarcodeQngInfoes/GetQngInfoData4REP009")]
        ITask<ResultModel<dynamic>> GetQngInfoData4REP009(string unitNo, string wipNo, string itemNo, string dateStart, string dateEnd, int page, int limit);

        /// <summary>
        /// 維修進/出統計報表
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NgRepairs/GetRepairData4REP013")]
        ITask<ResultModel<dynamic>> GetRepairData4REP013(string wipNo, string itemNo, string dateStart, string dateEnd, int page, int limit);

        /// <summary>
        /// 不良明細統計
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NgRepairs/GetNgData4QRS019")]
        ITask<ResultModel<dynamic>> GetNgData4QRS019(string productType, string testType, string unitNo, string lineID, string stationID, string wipNo, string itemNo, string dateStart, string dateEnd, string modelNo, int page, int limit);

        /// <summary>
        /// 不良明細QRS010
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NgRepairs/GetNgData4QRS010")]
        ITask<ResultModel<dynamic>> GetNgData4QRS010(string wipNo, string lineDesc, string stationID, string dateStart, string dateEnd);

        /// <summary>
        /// PCBA PPM QRS024
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/QRSPPM/GetQRS024Data")]
        ITask<ResultModel<PcbaPPMDTO>> GetQRS024Data(string wipNO, string itemNO, string customer, string dateStart, string dateEnd, string bdateStart, string bdateEnd, int page = 0, int limit = 10);

        /// <summary>
        /// PCBA PPM QRS026
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/QRSPPM/GetQRS026Data")]
        ITask<ResultModel<PcbaPPMRate>> GetQRS026Data(string itemNO, string customer, string dateStart, string dateEnd);

    }
}