package pwc.taxtech.atms.service;

import java.util.List;

import pwc.taxtech.atms.dto.LogOnDto;
import pwc.taxtech.atms.dto.LoginInputDto;
import pwc.taxtech.atms.dto.LoginOutputDto;
import pwc.taxtech.atms.dto.OperationResultDto;
import pwc.taxtech.atms.dto.organization.DimensionRoleDto;
import pwc.taxtech.atms.dto.permission.UserPermissionDto;
import pwc.taxtech.atms.dto.permission.UserPermissionKeyDto;
import pwc.taxtech.atms.dto.user.UserAndUserRoleSaveDto;
import pwc.taxtech.atms.dto.user.UserDto;
import pwc.taxtech.atms.dto.user.UserPasswordDto;
import pwc.taxtech.atms.dto.user.UserRoleDimensionValueDto;
import pwc.taxtech.atms.entitiy.User;
import pwc.taxtech.atms.entitiy.UserOrganization;

public interface UserService {
    UserPermissionDto getUserPermission(String userName);

    UserPermissionKeyDto getUserPermissionKey(String userName);

    User getUser(String id);

    OperationResultDto<LoginOutputDto> login(LoginInputDto input);

    OperationResultDto<LogOnDto> changeExternalUserPassword(UserPasswordDto userPasswordDto);

    OperationResultDto<LoginOutputDto> activeCheck(User tempUser);

    OperationResultDto<LoginOutputDto> externalUserLogin(User tempUser, String email, String password);

    UserDto getUserByID(String userId);

    List<User> findAllUsers();

    OperationResultDto<User> updateUser(UserAndUserRoleSaveDto userDto);

    OperationResultDto<User> checkEmailExist(String email, String userID);

    OperationResultDto<User> checkUserExist(String userName, String userID);

    void deleteUserDimensionValue(DimensionRoleDto dto, String userID);

    @SuppressWarnings("rawtypes")
    OperationResultDto deleteUserOrg(List<UserRoleDimensionValueDto> userRoleList);
    
    List<UserOrganization> findUserOrganizationByUserIDAndOrganizationID(String userID, String organizationID);

    UserDto getUserByDto(UserDto userParam);
}