package org.javamodularity.moduleplugin.tasks;

import org.gradle.api.Project;
import org.gradle.api.plugins.ApplicationPlugin;
import org.gradle.api.tasks.JavaExec;

public class RunTask extends AbstractModulePluginTask {

    public RunTask(Project project) {
        super(project);
    }

    public void configureRun() {
        project.getPluginManager().withPlugin(ApplicationPlugin.APPLICATION_PLUGIN_NAME, plugin -> doConfigureRun());
    }

    private void doConfigureRun() {
        if(helper().shouldFixEffectiveArguments()) {
            project.getTasks().replace(ApplicationPlugin.TASK_RUN_NAME, ModularJavaExec.class);
        }
        var mutator = new RunTaskMutator(getRunTask(), project);
        mutator.configureRun();
        project.afterEvaluate(p -> configureStartScripts());
    }

    private void configureStartScripts() {
        var mutator = new StartScriptsMutator(getRunTask(), project);
        mutator.updateStartScriptsTask(ApplicationPlugin.TASK_START_SCRIPTS_NAME);
        mutator.movePatchedLibs();
    }

    private JavaExec getRunTask() {
        return helper().task(ApplicationPlugin.TASK_RUN_NAME, JavaExec.class);
    }
}