import groovy.util.logging.Slf4j
import org.apache.maven.model.Parent
import org.commonjava.maven.atlas.ident.ref.ProjectVersionRef
import org.commonjava.maven.atlas.ident.ref.SimpleProjectVersionRef
import org.commonjava.maven.ext.common.ManipulationException
import org.commonjava.maven.ext.common.model.Project
import org.commonjava.maven.ext.core.ManipulationSession
import org.commonjava.maven.ext.core.groovy.BaseScript
import org.commonjava.maven.ext.core.groovy.InvocationStage
import org.commonjava.maven.ext.core.groovy.PMEBaseScript
import org.commonjava.maven.ext.core.groovy.PMEInvocationPoint
import org.commonjava.maven.ext.core.state.RESTState
import org.commonjava.maven.ext.io.rest.Translator

@PMEInvocationPoint(invocationPoint = InvocationStage.LAST)
@PMEBaseScript BaseScript pme

@Slf4j
class OverrideKieParentVersionLast {

    BaseScript pme
    Project project

    def execute() {
        ProjectVersionRef kieParentVersionRef = SimpleProjectVersionRef.parse("org.kie:kie-parent:7.26.0.Final")
        Parent parent = project.getModelParent()
        if ("kie-parent".equals(parent.getArtifactId())) {
            String projectVersion = getKieParentVersion(kieParentVersionRef);
            parent.setVersion(projectVersion)
            log.info("kie-parent version set to {} ", projectVersion)
        }
    }

    private String getKieParentVersion(ProjectVersionRef kieParentGav) {
        List<ProjectVersionRef> source = new ArrayList();
        source.add(kieParentGav);
        source.add(pme.getGAV());
        Map<ProjectVersionRef, String> restResult = this.getRESTAPI().translateVersions(source);
        String targetBuild = (String) restResult.get(kieParentGav);
        if (targetBuild == null) {
            log.error("REST result was {}", restResult);
            throw new ManipulationException("Multiple results returned ; unable to reset version.", new String[0]);
        } else {
            log.info("Kie Parent Version set to {}", targetBuild);
            return targetBuild;
        }
    }

    private Translator getRESTAPI() throws ManipulationException {
        RESTState rs = (RESTState)((ManipulationSession)pme.getSession()).getState(RESTState.class);
        return rs.getVersionTranslator();
    }
}

def OverrideKieParentVersionLast overrideKieParentVersionLast = new OverrideKieParentVersionLast(pme: pme, project: pme.getProject())
overrideKieParentVersionLast.execute()