package com.termux.shared.shell.command.environment;

import android.content.Context;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.termux.shared.shell.command.ExecutionCommand;
import java.util.HashMap;

public interface IShellEnvironment {

    /**
     * Get the default working directory path for the environment in case the path that was passed
     * was {@code null} or empty.
     *
     * @return Should return the default working directory path.
     */
    @NonNull
    String getDefaultWorkingDirectoryPath();

    /**
     * Get the default "/bin" path, like $PREFIX/bin.
     *
     * @return Should return the "/bin" path.
     */
    @NonNull
    String getDefaultBinPath();

    /**
     * Setup shell command arguments for the file to execute, like interpreter, etc.
     *
     * @param fileToExecute The file to execute.
     * @param arguments The arguments to pass to the executable.
     * @return Should return the final process arguments.
     */
    @NonNull
    String[] setupShellCommandArguments(@NonNull String fileToExecute, @Nullable String[] arguments);

    /**
     * Setup shell command environment to be used for commands.
     *
     * @param currentPackageContext The {@link Context} for the current package.
     * @param executionCommand The {@link ExecutionCommand} for which to set environment.
     * @return Should return the shell environment.
     */
    @NonNull
    HashMap<String, String> setupShellCommandEnvironment(@NonNull Context currentPackageContext, @NonNull ExecutionCommand executionCommand);
}
