// 
// Decompiled by Procyon v0.6.0
// 

package org.jline.console;

import org.jline.reader.Widget;
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import org.jline.reader.Completer;
import java.util.Map;
import java.util.List;
import org.jline.reader.LineReader;

public interface ConsoleEngine extends CommandRegistry
{
    public static final String VAR_NANORC = "NANORC";
    
    default String plainCommand(final String command) {
        return command.startsWith(":") ? command.substring(1) : command;
    }
    
    void setLineReader(final LineReader p0);
    
    void setSystemRegistry(final SystemRegistry p0);
    
    Object[] expandParameters(final String[] p0) throws Exception;
    
    String expandCommandLine(final String p0);
    
    String expandToList(final List<String> p0);
    
    Map<String, Boolean> scripts();
    
    void setScriptExtension(final String p0);
    
    boolean hasAlias(final String p0);
    
    String getAlias(final String p0);
    
    Map<String, List<String>> getPipes();
    
    List<String> getNamedPipes();
    
    List<Completer> scriptCompleters();
    
    void persist(final Path p0, final Object p1);
    
    Object slurp(final Path p0) throws IOException;
    
     <T> T consoleOption(final String p0, final T p1);
    
    void setConsoleOption(final String p0, final Object p1);
    
    Object execute(final String p0, final String p1, final String[] p2) throws Exception;
    
    default Object execute(final File script) throws Exception {
        return this.execute(script, "", new String[0]);
    }
    
    default Object execute(final File script, final String rawLine, final String[] args) throws Exception {
        return this.execute((script != null) ? script.toPath() : null, rawLine, args);
    }
    
    Object execute(final Path p0, final String p1, final String[] p2) throws Exception;
    
    ExecutionResult postProcess(final String p0, final Object p1, final String p2);
    
    ExecutionResult postProcess(final Object p0);
    
    void trace(final Object p0);
    
    void println(final Object p0);
    
    void putVariable(final String p0, final Object p1);
    
    Object getVariable(final String p0);
    
    boolean hasVariable(final String p0);
    
    void purge();
    
    boolean executeWidget(final Object p0);
    
    boolean isExecuting();
    
    public static class ExecutionResult
    {
        final int status;
        final Object result;
        
        public ExecutionResult(final int status, final Object result) {
            this.status = status;
            this.result = result;
        }
        
        public int status() {
            return this.status;
        }
        
        public Object result() {
            return this.result;
        }
    }
    
    public static class WidgetCreator implements Widget
    {
        private final ConsoleEngine consoleEngine;
        private final Object function;
        private final String name;
        
        public WidgetCreator(final ConsoleEngine consoleEngine, final String function) {
            this.consoleEngine = consoleEngine;
            this.name = function;
            this.function = consoleEngine.getVariable(function);
        }
        
        @Override
        public boolean apply() {
            return this.consoleEngine.executeWidget(this.function);
        }
        
        @Override
        public String toString() {
            return this.name;
        }
    }
}
