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;
using AMESCoreStudio.WebApi.DTO.AMES;

namespace AMESCoreStudio.Web
{
    [JsonReturn]
    public interface ISPC:IHttpApi
    {
        #region SPC001 巡檢類別維護

        /// <summary>
        /// 新增巡檢類別
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/InspectionTypes")]
        ITask<ResultModel<InspectionType>> PostInspectionType([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新巡檢類別
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/InspectionTypes/{id}")]
        ITask<ResultModel<InspectionType>> PutInspectionType(int id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除巡檢類別
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/InspectionTypes/{id}")]
        ITask<ResultModel<string>> DeleteInspectionType(int id);

        /// <summary>
        /// 根據ID獲取指定巡檢類別資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/InspectionTypes/{id}")]
        ITask<List<InspectionType>> GetInspectionType(int id);

        /// <summary>
        /// 獲取巡檢類別資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/InspectionTypes")]
        ITask<List<InspectionType>> GetInspectionTypes();

        #endregion

        #region SPC002 巡檢表單维護

        /// <summary>
        /// 新增巡檢表單
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/InspectionForms")]
        ITask<ResultModel<InspectionForm>> PostInspectionForm([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新巡檢表單
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/InspectionForms/{id}")]
        ITask<ResultModel<InspectionForm>> PutInspectionForm(int id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除巡檢表單维
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/InspectionForms/{id}")]
        ITask<ResultModel<string>> DeleteInspectionForm(int id);

        /// <summary>
        /// 根據ID獲取指定巡檢表單資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/InspectionForms/{id}")]
        ITask<List<InspectionForm>> GetInspectionForm(int id);

        /// <summary>
        /// 獲取指定巡檢表單資料By Query
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/InspectionForms/Query/{id}/{status}")]
        ITask<List<InspectionForm>> GetInspectionFormsByQuery(int id,string status);

        /// <summary>
        /// 獲取巡檢表單資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/InspectionForms")]
        ITask<List<InspectionForm>> GetInspectionForms();

        #endregion

        #region SPC003 巡檢細項維護

        /// <summary>
        /// 新增巡檢細項
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/InspectionItems")]
        ITask<ResultModel<InspectionItem>> PostInspectionItem([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新巡檢細項
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/InspectionItems/{id}")]
        ITask<ResultModel<InspectionItem>> PutInspectionItem(int id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除巡檢細項
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/InspectionItems/{id}")]
        ITask<string> DeleteInspectionItem(int id);

        /// <summary>
        /// 根據ID獲取指定巡檢細項資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/InspectionItems/{id}")]
        ITask<List<InspectionItem>> GetInspectionItem(int id);

        /// <summary>
        /// 根據ID獲取指定巡檢細項資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/InspectionItems/Form/{id}")]
        ITask<List<InspectionItem>> GetInspectionItemsByFormID(int id);

        /// <summary>
        /// 獲取巡檢細項資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/InspectionItems")]
        ITask<List<InspectionItem>> GetInspectionItems();

        #endregion

        #region SPC004 每日工時資料維護

        /// <summary>
        /// InspectionResultDetail By Id and ItemID
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/InspectionResultDetails/Query/{id}/{Iid}")]
        ITask<List<InspectionResultDetail>> GetInspectionResultDetailByQuery(int id, int Iid);

        /// <summary>
        /// InspectionResultDetailDto
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/InspectionResultDetails/Query/{id}")]
        ITask<List<InspectionResultDetailDto>> GetInspectionResultDetailQuery(int id);

        #endregion

        #region SPC005 巡檢結果維護

        /// <summary>
        /// 新增巡檢結果MASTER
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/InspectionResultMasters")]
        ITask<ResultModel<InspectionResultMaster>> PostInspectionResultMaster([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新巡檢結果MASTER
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/InspectionResultMasters/{id}")]
        ITask<ResultModel<InspectionResultMaster>> PutInspectionResultMaster(int id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新巡檢結果MASTER
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/InspectionResultDetails/{id}")]
        ITask<ResultModel<InspectionResultDetail>> PutInspectionResultDetail(int id, [FromBody, RawJsonContent] string model);


        /// <summary>
        /// 刪除巡檢結果MASTER
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/InspectionResultMasters/{id}")]
        ITask<ResultModel<string>> DeleteInspectionResultMaster(int id);

        /// <summary>
        /// 根據ID獲取指定巡檢結果MASTER
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/InspectionResultMasters/{id}")]
        ITask<List<InspectionResultMaster>> GetInspectionResultMaster(int id);

        /// <summary>
        /// 獲取巡檢結果MASTER
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/InspectionResultMasters")]
        ITask<List<InspectionResultMaster>> GetInspectionResultMasters();

        /// <summary>
        /// 根据巡檢結果MASTER
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/InspectionResultMasters/Form/{id}")]
        ITask<List<InspectionResultMaster>> GetInspectionResultMastersByFormId(int id);

        /// <summary>
        /// 根据巡檢結果MASTER
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/InspectionResultMasters/Query/{WipNo}/{ItemNo}/{BarcodeNo}/{StatusNo}")]
        ITask<List<InspectionResultMaster>> GetInspectionResultMastersByQuery(string WipNo, string ItemNo, string BarcodeNo, string StatusNo);

        /// <summary>
        /// 根据巡檢結果MASTER
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/InspectionResultMasters/QueryAll/{id}/{WipNo}/{ItemNo}/{BarcodeNo}/{StatusNo}/{sdate}/{edate}")]
        ITask<ResultModel<InspectionResultMasterDto>> GetInspectionResultMastersByQueryAll(int id, string WipNo, string ItemNo, string BarcodeNo, string StatusNo, string sdate, string edate, int page = 0, int limit = 10);
        

        /// <summary>
        /// 獲取MASTER ID
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/InspectionResultMasters/NewID")]
        ITask<string> GetInspectionResultMastersNewID();

        /// <summary>
        /// 新增巡檢結果Detail
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/InspectionResultDetails")]
        ITask<ResultModel<InspectionResultDetail>> PostInspectionResultDetail([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 新增巡檢結果Blob
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/InspectionResultBlobs")]
        ITask<ResultModel<InspectionResultBlob>> PostInspectionResultBlob([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 獲取指定巡檢表單Blob資料By Query
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/InspectionResultBlobs/Query/{id}/{itemID}")]
        ITask<List<InspectionResultBlob>> GetInspectionResultBlobsByQuery(int id, int itemID);


        /// <summary>
        /// 根據ID獲取指定巡檢結果Details
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/InspectionResultDetails/{id}")]
        ITask<List<InspectionResultDetail>> GetInspectionResultDetails(int id);

        


        #endregion



    }
}