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 IKCS:IHttpApi
    {
        #region KCS001 MAC資料維護

        /// <summary>
        /// 新增MAC資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/MACInfoes")]
        ITask<ResultModel<MACInfo>> PostMACInfo([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新MAC資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/MACInfoes/{id}")]
        ITask<ResultModel<MACInfo>> PutMACInfo(string id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除MAC資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/MACInfoes/{id}")]
        ITask<ResultModel<MACInfo>> DeleteMACInfo(string id);

        /// <summary>
        /// 修改群組區間
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/MACInfoes/UpdateMACInfoByClassGroupNo/{classGroupNo}/{macTitle}/{macMax}/{macMin}/{macValue}")]
        ITask<ResultModel<MACInfo>> UpdateMACInfoByClassGroupNo(string classGroupNo, string macTitle, string macMax, string macMin, string macValue);

        /// <summary>
        /// 根據ID獲取指定MAC資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/MACInfoes/{id}")]
        ITask<List<MACInfo>> GetMACInfo(string id);

        /// <summary>
        /// 獲取MAC資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/MACInfoes")]
        ITask<List<MACInfo>> GetMACInfoes(int page = 0, int limit = 10);

        /// <summary>
        /// 獲取MAC資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/MACInfoes/GetMACInfoes4KCS001")]
        ITask<List<MACInfo>> GetMACInfoes4KCS001(string itemNO, string classGroupNo, int page = 0, int limit = 10);

        #endregion

        #region KCS002 序號料號維護

        /// <summary>
        /// 新增序號料號
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/PartMaps")]
        ITask<ResultModel<PartMap>> PostPartMap([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新序號料號
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/PartMaps/{id}")]
        ITask<ResultModel<PartMap>> PutPartMap(string id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除序號料號
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/PartMaps/{id}")]
        ITask<ResultModel<PartMap>> DeletePartMap(string id);

        /// <summary>
        /// 根據ID獲取指定序號料號資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/PartMaps/{id}")]
        ITask<List<PartMap>> GetPartMap(string id);

        /// <summary>
        /// 獲取序號料號資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/PartMaps")]
        ITask<List<PartMap>> GetPartMaps(int page = 0, int limit = 10);

        #endregion

        #region KCS004 組件料號序號維護

        /// <summary>
        /// 新增組件料號序號
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/KPLinks")]
        ITask<ResultModel<KPLink>> PostKPLink([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新組件料號序號
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/KPLinks/{id}")]
        ITask<ResultModel<KPLink>> PutKPLink(string id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除組件料號序號
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/KPLinks/{id}")]
        ITask<ResultModel<KPLink>> DeleteKPLink(string id);

        /// <summary>
        /// 根據ID獲取指定組件料號序號資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/KPLinks/{id}")]
        ITask<List<KPLink>> GetKPLink(string id);

        /// <summary>
        /// 獲取組件料號序號資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/KPLinks")]
        ITask<List<KPLink>> GetKPLinks(int page = 0, int limit = 10);

        /// <summary>
        /// 刪除料號組件 (組件停用)
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/MaterialKp/ByKpNo/{id}")]
        ITask<ResultModel<MaterialKp>> DeleteMaterialKpByKpNo(string id);

        /// <summary>
        /// 刪除工單組件 (組件停用)
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/WipKps/ByKpNo/{id}")]
        ITask<ResultModel<WipKp>> DeleteWipKpsByKpNo(string id);
        #endregion

        #region KCS006 組件類別維護

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

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

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

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

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

        #endregion

        #region KCS007 組件料號維護

        /// <summary>
        /// 新增組件料號
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/MaterialKp")]
        ITask<ResultModel<MaterialKp>> PostMaterialKp([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新組件料號
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/MaterialKp/{id}")]
        ITask<ResultModel<MaterialKp>> PutMaterialKp(int id,[FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除組件料號
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/MaterialKp/{id}")]
        ITask<ResultModel<MaterialKp>> DeleteMaterialKp(int id);

        /// <summary>
        /// 根據ID獲取指定組件料號資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/MaterialKp/{id}")]
        ITask<List<MaterialKp>> GetMaterialKp(int id);

        /// <summary>
        /// 獲取組件料號資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/MaterialKp")]
        ITask<List<MaterialKp>> GetMaterialKps();

        /// <summary>
        /// 獲取組件類別資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/MaterialKp/ByItemID/{id}")]
        ITask<List<MaterialKp>> GetMaterialKpsByItemID(int id);


        #endregion
    }
}