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<UserDTO> UpdateUserAsync(UserDTO userDTO);
        Task<UserDTO> Authenticate(string UserName, string Password);

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

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

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

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

        string GenerateJwtToken(UserDTO userDTO);
    }
}
