using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WorkFlowCheck.Common.DTO;

namespace WorkFlowCheck.BL.Services.Interfaces
{
    public interface IUserService
    {
        Task<UserDTO> GetUserAsync(int Id);
        Task<List<UserDTO>> GetAllUserAsync();
        Task<bool> DeleteUserAsync(int Id);
        Task<UserDTO> UpdateUserAsync(UserDTO userDTO);
        Task<UserDTO> Authenticate(string UserName, string Password);
        Task<string> Authenticate2F1(string UserName, string Password);
        Task<UserDTO> Authenticate2F2(string UserName, string Password, string Code, string token2FA);
        Task<UserDTO> Authenticate2F2ChangePassword(string UserName, string OldPassword, string NewPassword, string Code, string token2FA);
        Task<UserDTO> AuthenticateNFC(string NFCCode);


        Task<RoleDTO> GetRoleAsync(int Id);
        Task<List<RoleDTO>> GetAllRoleAsync();
        Task<bool> DeleteRoleAsync(int Id);
        Task<RoleDTO> UpdateRoleAsync(RoleDTO roleDTO);

        Task<UserRoleDTO> GetUserRoleAsync(int Id);
        Task<List<UserRoleDTO>> GetAllUserRoleAsync();
        Task<bool> DeleteUserRoleAsync(int Id);
        Task<UserRoleDTO> UpdateUserRoleAsync(UserRoleDTO userRoleDTO);

        Task<RoleCheckListTemplateHeaderDTO> GetRoleCheckListTemplateHeaderAsync(int Id);
        Task<List<RoleCheckListTemplateHeaderDTO>> GetAllRoleCheckListTemplateHeadersAsync();
        Task<bool> DeleteRoleCheckListTemplateHeaderAsync(int Id);
        Task<RoleCheckListTemplateHeaderDTO> UpdateRoleCheckListTemplateHeaderAsync(RoleCheckListTemplateHeaderDTO roleCheckListTemplateHeaderDTO);

        Task<RoleCheckPointDTO> GetRoleCheckPointAsync(int Id);
        Task<List<RoleCheckPointDTO>> GetAllRoleCheckPointsAsync();
        Task<bool> DeleteRoleCheckPointAsync(int Id);
        Task<RoleCheckPointDTO> UpdateRoleCheckPointAsync(RoleCheckPointDTO roleCheckPointDTO);

        string GenerateJwtToken(UserDTO userDTO);
    }
}
