module Terminalwire::Client

def self.authority(url)

Extracted from HTTP. This is so we can
def self.authority(url)
  if url.port == url.default_port
    url.host
  else
    "#{url.host}:#{url.port}"
  end
end

def self.socket(...)

def self.socket(...)
  socket = UNIXSocket.new(...)
  transport = Terminalwire::Transport::Socket.new(socket)
  adapter = Terminalwire::Adapter::Socket.new(transport)
  Terminalwire::Client::Handler.new(adapter)
end

def self.tcp(...)

def self.tcp(...)
  socket = TCPSocket.new(...)
  transport = Terminalwire::Transport::Socket.new(socket)
  adapter = Terminalwire::Adapter::Socket.new(transport)
  Terminalwire::Client::Handler.new(adapter)
end

def self.websocket(url:, arguments: ARGV, entitlement: nil)

def self.websocket(url:, arguments: ARGV, entitlement: nil)
  url = URI(url)
  Async do |task|
    endpoint = Async::HTTP::Endpoint.parse(
      url,
      alpn_protocols: Async::HTTP::Protocol::HTTP11.names
    )
    Async::WebSocket::Client.connect(endpoint) do |adapter|
      transport = Terminalwire::Transport::WebSocket.new(adapter)
      adapter = Terminalwire::Adapter::Socket.new(transport)
      entitlement ||= Entitlement.from_url(url)
      Terminalwire::Client::Handler.new(adapter, arguments:, entitlement:).connect
    end
  end
end