//go:build with_gvisor

package tailssh

import (
	"io"

	"github.com/sagernet/sing-box/adapter"
)

type shellBackend interface {
	OpenSession(request shellRequest) (shellSession, error)
	Close() error
}

type shellRequest struct {
	User         *adapter.PlatformUser
	Command      string
	Env          []string
	Term         string
	Rows         uint16
	Cols         uint16
	WidthPixels  uint16
	HeightPixels uint16
}

type shellSession interface {
	io.ReadWriteCloser
	// CloseWrite signals EOF on the child's stdin without tearing down the
	// session, so programs that read stdin to EOF can finish normally.
	CloseWrite() error
	Resize(rows, cols, widthPixels, heightPixels uint16) error
	Signal(sig int) error
	Wait() (exitStatus uint32, err error)
}
