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 IPPS:IHttpApi
    {
        #region PPS001 工單狀態維護

        /// <summary>
        /// 新增工單狀態
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/WipStatus")]
        ITask<ResultModel<WipStatus>> PostWipStatus([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新工單狀態
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/WipStatus/{id}")]
        ITask<ResultModel<WipStatus>> PutWipStatus(string id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除工單狀態
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/WipStatus/{id}")]
        ITask<ResultModel<string>> DeleteWipStatus(string id);

        /// <summary>
        /// 根據ID獲取指定工單狀態資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/WipStatus/{id}")]
        ITask<List<WipStatus>> GetWipStatus(string id);

        /// <summary>
        /// 獲取工單狀態資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/WipStatus")]
        ITask<List<WipStatus>> GetWipStatus();

        #endregion

        #region PPS002 條碼狀態維護

        /// <summary>
        /// 新增條碼狀態
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/BarcodeStatus")]
        ITask<ResultModel<BarcodeStatus>> PostBarcodeStatus([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新條碼狀態
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/BarcodeStatus/{id}")]
        ITask<ResultModel<BarcodeStatus>> PutBarcodeStatus(string id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除條碼狀態
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/BarcodeStatus/{id}")]
        ITask<ResultModel<string>> DeleteBarcodeStatus(string id);

        /// <summary>
        /// 根據ID獲取指定條碼狀態資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/BarcodeStatus/{id}")]
        ITask<List<BarcodeStatus>> GetBarcodeStatus(string id);

        /// <summary>
        /// 獲取條碼狀態資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/BarcodeStatus")]
        ITask<List<BarcodeStatus>> GetBarcodeStatus();

        #endregion

        #region PPS003 機種C/T資料維護

        /// <summary>
        /// 新增機種C/T資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/CycleTimes")]
        ITask<ResultModel<CycleTime>> PostCycleTime([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新機種C/T資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/CycleTimes/{id}")]
        ITask<ResultModel<CycleTime>> PutCycleTime(string id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除機種C/T資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/CycleTimes/{id}")]
        ITask<ResultModel<CycleTime>> DeleteCycleTime(string id);

        /// <summary>
        /// 根據ID獲取指定機種C/T資料資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/CycleTimes/{id}")]
        ITask<List<CycleTime>> GetCycleTime(string id);

        /// <summary>
        /// 獲取機種C/T資料資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/CycleTimes")]
        ITask<List<CycleTime>> GetCycleTimes(int page = 0, int limit = 10);

        #endregion

        #region PPS005 異常群組維護

        /// <summary>
        /// 新增異常群組
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/ErrorGroups")]
        ITask<ResultModel<ErrorGroup>> PostErrorGroup([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新異常群組
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/ErrorGroups/{id}")]
        ITask<ResultModel<ErrorGroup>> PutErrorGroup(string id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除異常群組
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/ErrorGroups/{id}")]
        ITask<string> DeleteErrorGroup(string id);

        /// <summary>
        /// 根據ID獲取指定異常群組資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/ErrorGroups/{id}")]
        ITask<List<ErrorGroup>> GetErrorGroup(string id);

        /// <summary>
        /// 獲取異常群組資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/ErrorGroups")]
        ITask<List<ErrorGroup>> GetErrorGroups();

        #endregion

        #region PPS006 異常類別維護

        /// <summary>
        /// 新增異常類別
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/ErrorClasses")]
        ITask<ResultModel<ErrorClass>> PostErrorClass([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新異常類別
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/ErrorClasses/{id}")]
        ITask<ResultModel<ErrorClass>> PutErrorClass(string id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除異常類別
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/ErrorClasses/{id}")]
        ITask<ResultModel<string>> DeleteErrorClass(string id);

        /// <summary>
        /// 根據ID獲取指定異常類別資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/ErrorClasses/{id}")]
        ITask<List<ErrorClass>> GetErrorClass(string id);

        /// <summary>
        /// 獲取異常類別資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/ErrorClasses")]
        ITask<List<ErrorClass>> GetErrorClasses();

        /// <summary>
        /// 根据群組代碼獲取類別資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/ErrorClasses/Group/{no}")]
        ITask<List<ErrorClass>> GetErrorClassesByGroup(string no);

        #endregion

        #region PPS007 異常原因維護

        /// <summary>
        /// 新增異常原因
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/ErrorReasons")]
        ITask<ResultModel<ErrorReason>> PostErrorReason([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新異常原因
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/ErrorReasons/{id}")]
        ITask<ResultModel<ErrorReason>> PutErrorReason(string id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除異常原因
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/ErrorReasons/{id}")]
        ITask<ResultModel<string>> DeleteErrorReason(string id);

        /// <summary>
        /// 根據ID獲取指定異常原因資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/ErrorReasons/{id}")]
        ITask<List<ErrorReason>> GetErrorReason(string id);

        /// <summary>
        /// 獲取異常原因資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/ErrorReasons")]
        ITask<List<ErrorReason>> GetErrorReasons();

        /// <summary>
        /// 根据類別代碼獲取原因資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/ErrorReasons/Class/{no}")]
        ITask<List<ErrorReason>> GetErrorReasonsByClass(string no);

        #endregion

        #region PPS008 不良現象群組維護

        /// <summary>
        /// 新增不良現象群組
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/NGGroups")]
        ITask<ResultModel<NGGroup>> PostNGGroup([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新不良現象群組
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/NGGroups/{id}")]
        ITask<ResultModel<NGGroup>> PutNGGroup(string id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除不良現象群組
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/NGGroups/{id}")]
        ITask<ResultModel<NGGroup>> DeleteNGGroup(string id);

        /// <summary>
        /// 根據ID獲取指定不良現象群組資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NGGroups/{id}")]
        ITask<List<NGGroup>> GetNGGroup(string id);

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

        #endregion

        #region PPS009 不良現象類別維護

        /// <summary>
        /// 新增不良現象類別
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/NGClasses")]
        ITask<ResultModel<NGClass>> PostNGClass([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新不良現象類別
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/NGClasses/{id}")]
        ITask<ResultModel<NGClass>> PutNGClass(string id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除不良現象類別
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/NGClasses/{id}")]
        ITask<ResultModel<NGClass>> DeleteNGClass(string id);

        /// <summary>
        /// 根據ID獲取指定不良現象類別資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NGClasses/{id}")]
        ITask<List<NGClass>> GetNGClass(string id);

        /// <summary>
        /// 獲取不良現象類別資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NGClasses")]
        ITask<List<NGClass>> GetNGClasses();

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

        #endregion

        #region PPS010 不良現象原因維護

        /// <summary>
        /// 新增不良現象原因
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/NGReasons")]
        ITask<ResultModel<NGReason>> PostNGReason([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新不良現象原因
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/NGReasons/{id}")]
        ITask<ResultModel<NGReason>> PutNGReason(string id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新不良現象原因
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/NGReasons/{id}/{statusno}")]
        ITask<ResultModel<NGReason>> PutNGReasonStatus(string id, string statusno);

        /// <summary>
        /// 刪除不良現象原因
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/NGReasons/{id}")]
        ITask<ResultModel<NGReason>> DeleteNGReason(string id);

        /// <summary>
        /// 根據ID獲取指定不良現象原因資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NGReasons/{id}")]
        ITask<List<NGReason>> GetNGReason(string id);

        /// <summary>
        /// 獲取不良現象原因資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NGReasons")]
        ITask<List<NGReason>> GetNGReasons();

        /// <summary>
        /// 根据類別代碼獲取不良現象原因資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/NGReasons/Class/{no}")]
        ITask<ResultModel<NGReason>> GetNGReasonsByClass(string no, int page = 0, int limit = 10);

        #endregion

        #region PPS011 維修群組維護

        /// <summary>
        /// 新增維修群組
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/RMAGroups")]
        ITask<ResultModel<RMAGroup>> PostRMAGroup([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新維修群組
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/RMAGroups/{id}")]
        ITask<ResultModel<RMAGroup>> PutRMAGroup(string id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除維修群組
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/RMAGroups/{id}")]
        ITask<ResultModel<RMAGroup>> DeleteRMAGroup(string id);

        /// <summary>
        /// 根據ID獲取指定維修群組資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/RMAGroups/{id}")]
        ITask<List<RMAGroup>> GetRMAGroup(string id);

        /// <summary>
        /// 獲取維修群組資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/RMAGroups")]
        ITask<List<RMAGroup>> GetRMAGroups(int page = 0, int limit = 10);

        #endregion

        #region PPS012 維修類別維護

        /// <summary>
        /// 新增維修類別
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/RMAClasses")]
        ITask<ResultModel<RMAClass>> PostRMAClass([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新維修類別
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/RMAClasses/{id}")]
        ITask<ResultModel<RMAClass>> PutRMAClass(string id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除維修類別
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/RMAClasses/{id}")]
        ITask<ResultModel<RMAClass>> DeleteRMAClass(string id);

        /// <summary>
        /// 根據ID獲取指定維修類別資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/RMAClasses/{id}")]
        ITask<List<RMAClass>> GetRMAClass(string id);

        /// <summary>
        /// 獲取維修類別資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/RMAClasses")]
        ITask<List<RMAClass>> GetRMAClasses();

        /// <summary>
        /// 根据群組代碼獲取維修類別資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/RMAClasses/Group/{no}")]
        ITask<List<RMAClass>> GetRMAClassesByGroup(string no, int page = 0, int limit = 10);

        #endregion

        #region PPS013 維修原因維護

        /// <summary>
        /// 新增維修原因
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/RMAReasons")]
        ITask<ResultModel<RMAReason>> PostRMAReason([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新維修原因
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/RMAReasons/{id}")]
        ITask<ResultModel<RMAReason>> PutRMAReason(string id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除維修原因
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/RMAReasons/{id}")]
        ITask<ResultModel<RMAReason>> DeleteRMAReason(string id);

        /// <summary>
        /// 根據ID獲取指定維修原因資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/RMAReasons/{id}")]
        ITask<List<RMAReason>> GetRMAReason(string id);

        /// <summary>
        /// 獲取維修原因資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/RMAReasons")]
        ITask<List<RMAReason>> GetRMAReasons();

        /// <summary>
        /// 獲取維修原因資料(distinct)
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/RMAReasons/GetDistinctRMAReason")]
        ITask<ResultModel<dynamic>> GetDistinctRMAReason();

        /// <summary>
        /// 根据類別代碼獲取維修原因資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/RMAReasons/Class/{no}")]
        ITask<List<RMAReason>> GetRMAReasonsByClass(string no, int page = 0, int limit = 10);

        #endregion

        #region PPS014 維修方式維護

        /// <summary>
        /// 新增維修方式
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/RepairTypes")]
        ITask<ResultModel<RepairType>> PostRepairType([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新維修方式
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/RepairTypes/{id}")]
        ITask<ResultModel<RepairType>> PutRepairType(string id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除維修方式
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/RepairTypes/{id}")]
        ITask<ResultModel<RepairType>> DeleteRepairType(string id);

        /// <summary>
        /// 根據ID獲取指定維修方式資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/RepairTypes/{id}")]
        ITask<List<RepairType>> GetRepairType(string id);

        /// <summary>
        /// 獲取維修方式資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/RepairTypes")]
        ITask<List<RepairType>> GetRepairTypes(int page = 0, int limit = 10);

        #endregion

        #region PPS015 組件類別維護

        /// <summary>
        /// 新增組件類別
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/RepairItems")]
        ITask<ResultModel<RepairItem>> PostRepairItem([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新組件類別
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/RepairItems/{id}")]
        ITask<ResultModel<RepairItem>> PutRepairItem(string id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除組件類別
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/RepairItems/{id}")]
        ITask<ResultModel<RepairItem>> DeleteRepairItem(string id);

        /// <summary>
        /// 根據ID獲取指定組件類別資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/RepairItems/{id}")]
        ITask<List<RepairItem>> GetRepairItem(string id);

        /// <summary>
        /// 獲取組件類別資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/RepairItems")]
        ITask<List<RepairItem>> GetRepairItems(int page = 0, int limit = 10);

        #endregion

        #region PPS016 問題類別維護

        /// <summary>
        /// 新增問題類別
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/QATypes")]
        ITask<ResultModel<QAType>> PostQAType([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新問題類別
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/QATypes/{id}")]
        ITask<ResultModel<QAType>> PutQAType(int id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除問題類別
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/QATypes/{id}")]
        ITask<ResultModel<QAType>> DeleteQAType(int id);

        /// <summary>
        /// 根據ID獲取指定問題類別資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/QATypes/{id}")]
        ITask<List<QAType>> GetQAType(int id);

        /// <summary>
        /// 獲取問題類別資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/QATypes")]
        ITask<List<QAType>> GetQATypes(int page = 0, int limit = 10);

        #endregion

        /// <summary>
        /// 根據PLM料號獲取指定資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("/api/PlmMeterialInfoe/{id}")]
        ITask<List<PlmMeterialInfo>> GetPlmMeterialInfo(string id);

        /// <summary>
        /// 根據PLM料號獲取指定資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("/api/PlmBoms/GetPlmBom4REP001")]
        ITask<List<PlmBom>> GetPlmBom4REP001(string itemNo,string locationNo);
    }
}