using Microsoft.AspNetCore.Http;
using MTWorkHR.Application.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MTWorkHR.Application.Identity
{
    public interface IUserService
    {
        Task<PagingResultDto<UserAllDto>> GetAll(UserPagingInputDto PagingInputDto);
        Task<UserDto> GetById(string userId);
        Task<UserUpdateDto> GetByIdForUpdate(string userId);

        Task<UserDto> GetByEmail(string email);
        Task<UserUpdateDto> GetById();
        Task<List<UserDto>> GetAllEmployees();

        Task<UserDto> GetUserById(string id);
        Task<EmployeeInfoDto> GetEmployeeInfo(string id);
        Task<string> GetUserFullName(string userId);
        Task Delete(string id);
        Task<UserDto> Create(UserDto input);
        Task<UserUpdateDto> Update(UserUpdateDto input);
        Task<ForgetPasswordResponseDto> ForgetPasswordMail(string email);
        Task<JobInterviewDto> SetUpInterview(JobInterviewDto interview);
        Task<bool> ResetPassword(ResetPasswordDto input);

        Task<bool> ForgetPassword(ForgetPasswordDto model);
        Task<bool> ConfirmEmail(ConfirmEmailDto model);
        Task<bool> IsExpiredToken(ConfirmEmailDto model);
        Task<bool> VerifyOTP(VerifyOTPDto input);

        Task<List<UserAllDto>> GetAllCompanyEmployees();
        Task<BlobObject> Download(string filePath);
        Task<UserDto> GetUserWithAttachmentById(string id);
        Task<List<UserDto>> GetUsersWithAttachmentsByIds(List<string> ids);
        
        Task<string> GetProfileImage(string userId);
        Task<bool> Update(string userId, long companyId);
        Task Suspend(string id);
        Task<bool> UnAssignCompanyEmployees(long companyId);
        Task<(string FullName, string Email, string ProfileImage)> GetUserNameEmail(string userId);

    }
}
