package eu.dnetlib.uoaadmintoolslibrary.handlers.utils;

import eu.dnetlib.uoaauthorizationlibrary.security.AuthorizationService;
import org.apache.log4j.Logger;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class RolesUtils {
    @Autowired
    private AuthorizationService authorizationService;

    private final Logger log = Logger.getLogger(this.getClass());

    public List<String> getRoles() {
        return authorizationService.getRoles();
    }

    public String getEmail() {
        return authorizationService.getEmail();
    }

    public String getAaiId() {
        return authorizationService.getAaiId();
    }

    public boolean isPortalAdmin(List<String> roles) {
        if(roles == null) {
            return false;
        }
//        log.debug(authorizationService.PORTAL_ADMIN);
//        log.debug("PortalAdmin: "+roles.contains(authorizationService.PORTAL_ADMIN));
        return roles.contains(authorizationService.PORTAL_ADMIN);
    }

    public boolean isCurator(List<String> roles, String type) {
        if(roles == null) {
            return false;
        }
//        log.debug(authorizationService.curator(type));
//        log.debug("Curator in "+type+": "+roles.contains(authorizationService.curator(type)));
        return roles.contains(authorizationService.curator(type));
    }

    public boolean isManager(List<String> roles, String type, String id) {
        if(roles == null) {
            return false;
        }
//        log.debug(authorizationService.manager(type, id));
//        log.debug("Manager in "+type+" - "+id+": "+roles.contains(authorizationService.manager(type, id)));
        return roles.contains(authorizationService.manager(type, id));
    }

    public boolean isMember(List<String> roles, String type, String id) {
        if(roles == null) {
            return false;
        }
//        log.debug(authorizationService.member(type, id));
//        log.debug("Member in "+type+" - "+id+": "+roles.contains(authorizationService.member(type, id)));
        return roles.contains(authorizationService.member(type, id));
    }

    public boolean isLoggedIn(List<String> roles) {
        if(roles == null || roles.contains(authorizationService.ANONYMOUS_USER)) {
            return false;
        }
        return true;
    }

    public boolean hasUpdateAuthority(List<String> roles, String type, String id) {
        return isPortalAdmin(roles) || isCurator(roles, type) || isManager(roles, type, id);
    }

    public boolean hasCreateAndDeleteAuthority(List<String> roles, String type) {
        return isPortalAdmin(roles) || isCurator(roles, type);
    }
}
