package org.egl_cepgl.pm.service;

//import lombok.extern.slf4j.Slf4j;
//import org.egl_cepgl.pm.dto.KCUserRegister;
//import org.egl_cepgl.pm.dto.UserDto;
//import org.egl_cepgl.pm.model.user.User;
//import org.egl_cepgl.pm.repository.UserRepository;
//import org.keycloak.admin.client.Keycloak;
//import org.keycloak.admin.client.resource.RealmResource;
//import org.keycloak.admin.client.resource.UserResource;
//import org.keycloak.admin.client.resource.UsersResource;
//import org.keycloak.representations.idm.CredentialRepresentation;
//import org.keycloak.representations.idm.UserRepresentation;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Service;
//import org.springframework.util.CollectionUtils;
//
//import javax.ws.rs.core.Response;
//import java.time.Instant;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Locale;
//import java.util.Objects;

//@Slf4j
//@Service
//public class KeyCloakUserService
//{
//    @Value("${keycloak.realm}")
//    private String realm;
//
//    private Keycloak keycloak;
//    private final RoleService roleService;
//    private UserService userService;
//    private UserRepository userRepository;
//
//    public KeyCloakUserService(Keycloak keycloak, RoleService roleService, UserService userService, UserRepository userRepository)
//    {
//        this.keycloak = keycloak;
//        this.roleService = roleService;
//        this.userService= userService;
//        this.userRepository= userRepository;
//    }
//
//    public KCUserRegister addUser(KCUserRegister ur)
//    {
//        User userd= new User("", ur.getFull_name(), ur.getEmail(), ur.getPassword(),ur.getPhone(), false);
////        SignInValidator signInValidator= new SignInValidator(userRepository);
////        Map<String, List<String>> errors= signInValidator.validate(UserDto.fromEntity(userd));
////        if(!errors.isEmpty())
////            throw new InvalidEntityException("Invalid==", ErrorCodes.USER_NOT_VALID, errors);
//
//        UserRepresentation user=new UserRepresentation();
//        user.setEnabled(true);
//        user.setUsername(ur.getEmail());
//        user.setEmail(ur.getEmail());
//        user.setFirstName(ur.getFull_name());
//        user.setEmailVerified(false);
//
//        CredentialRepresentation credentialRepresentation=new CredentialRepresentation();
//        credentialRepresentation.setValue(ur.getPassword());
//        credentialRepresentation.setTemporary(false);
//        credentialRepresentation.setType(CredentialRepresentation.PASSWORD);
//        List<CredentialRepresentation> list = new ArrayList<>();
//        list.add(credentialRepresentation);
//        user.setCredentials(list);
//        UsersResource usersResource = getUsersResource();
//        Response response = usersResource.create(user);
//        if(Objects.equals(201,response.getStatus()) || Objects.equals(200,response.getStatus()))
//        {
//            List<UserRepresentation> rpl = usersResource.searchByUsername(ur.getUsername(), true);
//            if(!CollectionUtils.isEmpty(rpl))
//            {
//                UserRepresentation up1 = rpl.stream().filter(up ->
//                        Objects.equals(false, up.isEmailVerified())).findFirst().orElse(null);
//                //if (ur.isAdmin())
//                //this.roleService.assignRole(up1.getId(), "admin");
//                //assert up1 != null;
//                //emailVerification(userRepresentation1.getId());
//                log.info("BVDDD==="+userd.toString()+"===="+up1.toString());
//                userd.setId_kcloak(up1.getId());
//                //if(!errors.isEmpty())
//                this.userService.addUser(UserDto.fromEntity(userd));
//            }
//            return ur;
//        }
//        return null;
//    }
//
//    private UsersResource getUsersResource() {
//        RealmResource realm1 = keycloak.realm(realm);
//        return realm1.users();
//    }
//
//    public void emailVerification(String userId)
//    {
//        UsersResource usersResource = getUsersResource();
//        usersResource.get(userId).sendVerifyEmail();
//    }
//
//    public UserResource getUserResource(String userId)
//    {
//        UsersResource usersResource = getUsersResource();
//        return usersResource.get(userId);
//    }
//}
