using Ropin.Inspection.Model;
using Ropin.Inspection.Model.SearchModel;
using Ropin.Inspection.Model.ViewModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Security.Claims;
using System.Text;
using System.Threading.Tasks;

namespace Ropin.Inspection.Service.Interface
{
    public interface ITsysUserService: IBaseService<TsysUserViewModel>,IBaseServiceById<TsysUserViewModel,Guid>
    {
        Task<IEnumerable<TsysUserViewModel>> GetAllAsync();
        Task<IEnumerable<TsysUserViewModel>> GetByConditionAsync(Expression<Func<TsysUserViewModel, bool>> expression);
        Task UpdateUserAsync(Guid id, TsysUserUpdateViewModel updateUser);

        Task<List<TsysUserViewModel>> GetByAsync(TsysUserSearchModel SearchModel);
        Task<TsysUserViewModel> LoginByAsync(LoginModel loginModel);
        Task<IEnumerable<TsysUserViewModel>> GetByStoreCodeAsync(string storeCode);
        TsysUserViewModel GetUser(TsysUserSearchModel user);

        Task ResetPasswordAsync(Guid id);
        Task ChangePasswordAsync(Guid id, ChangePasswordModel passwordModel);

        Task CreateOneAsync(TsysUserCreateViewModel viewModel);
        //TsysUserViewModel Find(TsysUserSearchModel searchModel);
        //List<TsysUserViewModel> FindAll();
        Task<TsysUserDetailViewModel> GetUserDetailByAsync(LoginModel loginModel);
        TsysUserDetailViewModel GetUserDetail(LoginModel loginModel);
        Task UpdateUserOpenIdAsync(Guid id, string openId);
        Task<List<TsysUserDetailWithOrgRoleViewModel>> GetByNameAsync(TsysUserSearchByNameModel searchModel);
        Task<TsysUserDetailWithOrgRoleViewModel> GetByUserIdAsync(Guid userId);
        Task LogOutByAsync();
        Task<TsysUserViewModel> GetByMobileAsync(string mobile);
        Task<bool> IsExistByMobileAsync(string mobile);
        Task<bool> IsNeedAuth();
        Task<bool> SetOpenId(string openId);
    }
}