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

package org.jline.terminal;

import org.jline.terminal.impl.NativeSignalHandler;
import org.jline.utils.ColorPalette;
import java.util.function.IntSupplier;
import java.util.function.IntConsumer;
import org.jline.utils.InfoCmp;
import java.io.OutputStream;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.io.PrintWriter;
import org.jline.utils.NonBlockingReader;
import java.io.Flushable;
import java.io.Closeable;

public interface Terminal extends Closeable, Flushable
{
    public static final String TYPE_DUMB = "dumb";
    public static final String TYPE_DUMB_COLOR = "dumb-color";
    
    String getName();
    
    SignalHandler handle(final Signal p0, final SignalHandler p1);
    
    void raise(final Signal p0);
    
    NonBlockingReader reader();
    
    PrintWriter writer();
    
    Charset encoding();
    
    default Charset inputEncoding() {
        return this.encoding();
    }
    
    default Charset outputEncoding() {
        return this.encoding();
    }
    
    @Deprecated
    default Charset stdinEncoding() {
        return this.inputEncoding();
    }
    
    @Deprecated
    default Charset stdoutEncoding() {
        return this.outputEncoding();
    }
    
    @Deprecated
    default Charset stderrEncoding() {
        return this.outputEncoding();
    }
    
    InputStream input();
    
    OutputStream output();
    
    boolean canPauseResume();
    
    void pause();
    
    void pause(final boolean p0) throws InterruptedException;
    
    void resume();
    
    boolean paused();
    
    Attributes enterRawMode();
    
    boolean echo();
    
    boolean echo(final boolean p0);
    
    Attributes getAttributes();
    
    void setAttributes(final Attributes p0);
    
    Size getSize();
    
    void setSize(final Size p0);
    
    default int getWidth() {
        return this.getSize().getColumns();
    }
    
    default int getHeight() {
        return this.getSize().getRows();
    }
    
    default Size getBufferSize() {
        return this.getSize();
    }
    
    void flush();
    
    String getType();
    
    boolean puts(final InfoCmp.Capability p0, final Object... p1);
    
    boolean getBooleanCapability(final InfoCmp.Capability p0);
    
    Integer getNumericCapability(final InfoCmp.Capability p0);
    
    String getStringCapability(final InfoCmp.Capability p0);
    
    Cursor getCursorPosition(final IntConsumer p0);
    
    boolean hasMouseSupport();
    
    boolean trackMouse(final MouseTracking p0);
    
    MouseTracking getCurrentMouseTracking();
    
    MouseEvent readMouseEvent();
    
    MouseEvent readMouseEvent(final IntSupplier p0);
    
    MouseEvent readMouseEvent(final String p0);
    
    MouseEvent readMouseEvent(final IntSupplier p0, final String p1);
    
    boolean hasFocusSupport();
    
    boolean trackFocus(final boolean p0);
    
    ColorPalette getPalette();
    
    default int getDefaultForegroundColor() {
        return this.getPalette().getDefaultForeground();
    }
    
    default int getDefaultBackgroundColor() {
        return this.getPalette().getDefaultBackground();
    }
    
    public enum Signal
    {
        INT, 
        QUIT, 
        TSTP, 
        CONT, 
        INFO, 
        WINCH;
    }
    
    public interface SignalHandler
    {
        public static final SignalHandler SIG_DFL = NativeSignalHandler.SIG_DFL;
        public static final SignalHandler SIG_IGN = NativeSignalHandler.SIG_IGN;
        
        void handle(final Signal p0);
    }
    
    public enum MouseTracking
    {
        Off, 
        Normal, 
        Button, 
        Any;
    }
}
