using WorkFlowCheck.Common.DTO;

namespace WorkFlowCheck.Web.Services.Interfaces
{
    public interface IUserService
    {
        Task<UserDTO> GetUser(int id);
        Task<List<UserDTO>> GetAllUsers();
        Task<ApiResponseDTO<UserDTO>> UpdateUser(UserDTO userDTO);
        Task<ApiResponseDTO<UserDTO>> Authenticate(string username, string password);
        Task<ApiResponseDTO<string>> Authenticate2F1(string username, string password);
        Task<ApiResponseDTO<UserDTO>> Authenticate2F2(string username, string password, string code, string token2FA);
        Task<ApiResponseDTO<UserDTO>> Authenticate2F2ChangePassword(string username, string oldpassword,string newpassword, string code, string token2FA);
        Task<bool> DeleteUser(int id);

        Task<RoleDTO> GetRole(int id);
        Task<List<RoleDTO>> GetAllRoles();
        Task<ApiResponseDTO<RoleDTO>> UpdateRole(RoleDTO roleDTO);
        Task<bool> DeleteRole(int id);

        Task<UserRoleDTO> GetUserRole(int id);
        Task<List<UserRoleDTO>> GetAllUserRoles();
        Task<ApiResponseDTO<UserRoleDTO>> UpdateUserRole(UserRoleDTO userRoleDTO);
        Task<bool> DeleteUserRole(int id);

        Task<RoleCheckListTemplateHeaderDTO> GetRoleCheckListTemplateHeader(int id);
        Task<List<RoleCheckListTemplateHeaderDTO>> GetAllRoleCheckListTemplates();
        Task<ApiResponseDTO<RoleCheckListTemplateHeaderDTO>> UpdateRoleCheckListTemplateHeader(RoleCheckListTemplateHeaderDTO roleCheckListTemplateHeaderDTO);
        Task<bool> DeleteRoleCheckListTemplateHeader(int id);

        Task<RoleCheckPointDTO> GetRoleCheckPoint(int id);
        Task<List<RoleCheckPointDTO>> GetAllRoleCheckPoints();
        Task<ApiResponseDTO<RoleCheckPointDTO>> UpdateRoleCheckPoint(RoleCheckPointDTO roleCheckPointDTO);
        Task<bool> DeleteRoleCheckPoint(int id);
    }
}
