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

namespace AMESCoreStudio.Web
{
    [JsonReturn]
    public interface ISYS : IHttpApi
    {
        #region SYS001系統資料維護相關

        /// <summary>
        /// 新增系統
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/SystemInfoes")]
        ITask<ResultModel<SystemInfo>> PostSystemInfo([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新系統
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/SystemInfoes/{id}")]
        ITask<ResultModel<SystemInfo>> PutSystemInfo(int id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除系統
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/SystemInfoes/{id}")]
        ITask<ResultModel<SystemInfo>> DeleteSystemInfo(int id);

        /// <summary>
        /// 根據ID獲取指定系統資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/SystemInfoes/{id}")]
        ITask<List<SystemInfo>> GetSystemInfo(int id);

        /// <summary>
        /// 獲取系統資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/SystemInfoes")]
        ITask<ResultModel<SystemInfo>> GetSystemInfoes(int page = 0, int limit = 10);

        #endregion

        #region SYS002模組資料維護相關

        /// <summary>
        /// 新增模組
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/ModuleInfoes")]
        ITask<ResultModel<ModuleInfo>> PostModuleInfo([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新模組
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/ModuleInfoes/{id}")]
        ITask<ResultModel<ModuleInfo>> PutModuleInfo(int id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除模組
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/ModuleInfoes/{id}")]
        ITask<ResultModel<ModuleInfo>> DeleteModuleInfo(int id);

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

        /// <summary>
        /// 獲取模組資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/ModuleInfoes")]
        ITask<List<ModuleInfo>> GetModuleInfoes();

        /// <summary>
        /// 根据系統獲取模組資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/ModuleInfoes/System/{id}")]
        ITask<ResultModel<ModuleInfo>> GetModuleInfoesBySystem(int id, int page = 0, int limit = 10);

        #endregion

        #region SYS003功能資料維護相關 

        /// <summary>
        /// 新增功能
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/ProgramInfoes")]
        ITask<ResultModel<ProgramInfo>> PostProgramInfo([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新功能
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/ProgramInfoes/{id}")]
        ITask<ResultModel<ProgramInfo>> PutProgramInfo(int id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除功能
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/ProgramInfoes/{id}")]
        ITask<ResultModel<ProgramInfo>> DeleteProgramInfo(int id);

        /// <summary>
        /// 根據ID獲取指定功能資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/ProgramInfoes/{id}")]
        ITask<List<ProgramInfo>> GetProgramInfo(int id);

        /// <summary>
        /// 獲取功能資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/ProgramInfoes")]
        ITask<List<ProgramInfo>> GetProgramInfoes();

        /// <summary>
        /// 根据模组编号獲取功能資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/ProgramInfoes/Module/{id}")]
        ITask<ResultModel<ProgramInfo>> GetProgramInfoesByMoudle(int id, int page = 0, int limit = 10);

        /// <summary>
        /// 根据系統+模组獲取模組資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/ProgramInfoes/GetProgramInfoesBySystemModule")]
        ITask<ResultModel<dynamic>> GetProgramInfoesBySystemModule(int systemID,int moduleID, int page = 0, int limit = 10);

        #endregion

        #region SYS004角色資料維護相關 

        /// <summary>
        /// 新增角色
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/RoleInfoes")]
        ITask<ResultModel<RoleInfo>> PostRoleInfo([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新角色
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/RoleInfoes/{id}")]
        ITask<ResultModel<RoleInfo>> PutRoleInfo(int id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除角色
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/RoleInfoes/{id}")]
        ITask<ResultModel<RoleInfo>> DeleteRoleInfo(int id);

        /// <summary>
        /// 根據ID獲取指定角色資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/RoleInfoes/{id}")]
        ITask<List<RoleInfo>> GetRoleInfo(int id);

        /// <summary>
        /// 獲取角色資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/RoleInfoes")]
        ITask<ResultModel<RoleInfo>> GetRoleInfoes(int page = 0, int limit = 10);

        #endregion

        #region SYS005角色模组資料維護相關 

        /// <summary>
        /// 新增角色模组
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/RoleModules")]
        ITask<ResultModel<RoleModule>> PostRoleModule([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新角色模组
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/RoleModules/{id}")]
        ITask<ResultModel<RoleModule>> PutRoleModule(int id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除角色模组
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/RoleModules/{id}")]
        ITask<ResultModel<RoleModule>> DeleteRoleModule(int id);

        /// <summary>
        /// 根據ID獲取指定角色模组資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/RoleModules/{id}")]
        ITask<List<RoleModule>> GetRoleModule(int id);

        /// <summary>
        /// 獲取角色模组資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/RoleModules")]
        ITask<List<RoleModule>> GetRoleModules();

        /// <summary>
        /// 根据角色ID獲取角色模组資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/RoleModules/Role/{id}")]
        ITask<ResultModel<RoleModule>> GetRoleModulesByRole(int id, int page = 0, int limit = 10);

        #endregion

        #region SYS006角色功能資料維護相關 

        /// <summary>
        /// 新增角色功能
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/RolePrograms")]
        ITask<ResultModel<RoleProgram>> PostRoleProgram([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新角色功能
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/RolePrograms/{id}")]
        ITask<ResultModel<RoleProgram>> PutRoleProgram(int id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除角色功能
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/RolePrograms/{id}")]
        ITask<ResultModel<RoleProgram>> DeleteRoleProgram(int id);

        /// <summary>
        /// 根據ID獲取指定角色功能資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/RolePrograms/{id}")]
        ITask<List<RoleProgram>> GetRoleProgram(int id);

        /// <summary>
        /// 獲取角色功能資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/RolePrograms")]
        ITask<List<RoleProgram>> GetRolePrograms();

        /// <summary>
        /// 根据角色ID獲取角色功能資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/RolePrograms/Role/{id}")]
        ITask<ResultModel<RoleProgram>> GetRoleProgramsByRole(int id, int page = 0, int limit = 10);

        #endregion

        #region SYS007部门資料維護相關

        /// <summary>
        /// 新增部门
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/DeptInfoes")]
        ITask<ResultModel<DeptInfo>> PostDeptInfo([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新部门
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/DeptInfoes/{id}")]
        ITask<ResultModel<DeptInfo>> PutDeptInfo(int id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除部门
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/DeptInfoes/{id}")]
        ITask<ResultModel<DeptInfo>> DeleteDeptInfo(int id);

        /// <summary>
        /// 根據ID獲取指定部门資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/DeptInfoes/{id}")]
        ITask<List<DeptInfo>> GetDeptInfo(int id);

        /// <summary>
        /// 獲取部门資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/DeptInfoes")]
        ITask<List<DeptInfo>> GetDeptInfoes();

        #endregion

        #region SYS008用户資料維護相關

        /// <summary>
        /// 新增用户
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/UserInfoes")]
        ITask<ResultModel<UserInfo>> PostUserInfo([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新用户
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/UserInfoes/{id}")]
        ITask<ResultModel<UserInfo>> PutUserInfo(int id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除用户
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/UserInfoes/{id}")]
        ITask<ResultModel<UserInfo>> DeleteUserInfo(int id);

        /// <summary>
        /// 根據ID獲取指定用户資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/UserInfoes/{id}")]
        ITask<List<UserInfo>> GetUserInfo(int id);

        /// <summary>
        /// 獲取用户資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/UserInfoes")]
        ITask<ResultModel<UserInfo>> GetUserInfoes(int page = 0, int limit = 10);

        /// <summary>
        /// 用UserNo 查詢
        /// </summary>
        /// <param name="id">UserNo</param>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/UserInfoes/ByUserNo/{id}")]
        ITask<UserInfo> GetUserInfoByUserNo(string id);

        #endregion

        #region SYS009用户角色資料維護相關 

        /// <summary>
        /// 新增用户角色
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPost("api/UserRoles")]
        ITask<ResultModel<UserRole>> PostUserRole([FromBody, RawJsonContent] string model);

        /// <summary>
        /// 更新用户角色
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpPut("api/UserRoles/{id}")]
        ITask<ResultModel<UserRole>> PutUserRole(int id, [FromBody, RawJsonContent] string model);

        /// <summary>
        /// 刪除用户角色
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpDelete("api/UserRoles/{id}")]
        ITask<ResultModel<UserRole>> DeleteUserRole(int id);

        /// <summary>
        /// 根據ID獲取指定用户角色資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/UserRoles/{id}")]
        ITask<List<UserRole>> GetUserRole(int id);

        /// <summary>
        /// 獲取用户角色資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/UserRoles")]
        ITask<List<UserRole>> GetUserRoles();

        /// <summary>
        /// 根据角色ID獲取用户角色資料
        /// </summary>
        /// <returns></returns>
        [WebApiClient.Attributes.HttpGet("api/UserRoles/User/{id}")]
        ITask<ResultModel<UserRole>> GetUserRolesByUser(int id, int page = 0, int limit = 10);

        #endregion

    }
}