class AAICreateTasks {

    protected int getLowestUnusedVfModuleIndexFromAAIVnfResponse(GenericVnf genericVnf, VfModule newVfModule) {

        String newVfModuleModelInvariantUUID = null;
        if (newVfModule.getModelInfoVfModule() != null) {
            newVfModuleModelInvariantUUID = newVfModule.getModelInfoVfModule().getModelInvariantUUID();
        }


        if (genericVnf != null && genericVnf.getVfModules() != null && !genericVnf.getVfModules().isEmpty()) {
            List<VfModule> modules = genericVnf.getVfModules().stream()
                    .filter(item -> !item.getVfModuleId().equals(newVfModule.getVfModuleId()))
                    .collect(Collectors.toList());
            TreeSet<Integer> moduleIndices = new TreeSet<>();
            int nullIndexFound = 0;
            for (VfModule vfModule : modules) {
                if (vfModule.getModelInfoVfModule() != null) {
                    if (vfModule.getModelInfoVfModule().getModelInvariantUUID().equals(newVfModuleModelInvariantUUID)) {
                        if (vfModule.getModuleIndex() != null) {
                            moduleIndices.add(vfModule.getModuleIndex());
                        } else {
                            nullIndexFound++;
                            logger.warn("Found null index for vf-module-id {} and model-invariant-uuid {}",
                                    vfModule.getVfModuleId(), vfModule.getModelInfoVfModule().getModelInvariantUUID());
                        }
                    }
                }
            }

            return calculateUnusedIndex(moduleIndices, nullIndexFound);
        } else {
            return 0;
        }
    }

}