const localhost = host =>
  process.getuid() === 0 &&
  (host === 'localhost' || host === '0.0.0.0' || host === '127.0.0.1');

export default (
  { request: { headers }, client: { conn } },
  { user, host, port, auth }
) => ({
  args: localhost(host)
    ? ['login', '-h', conn.remoteAddress.split(':')[3]]
    : [
        'ssh',
        address(headers, user, host),
        '-p',
        port,
        '-o',
        `PreferredAuthentications=${auth}`,
      ],
  user:
    localhost(host) ||
    user !== '' ||
    user.includes('@') ||
    address(headers, user, host).includes('@'),
});

function address(headers, user, host) {
  const match = headers.referer.match('.+/ssh/.+$');
  const fallback = user ? `${user}@${host}` : host;
  return match ? `${match[0].split('/ssh/').pop()}@${host}` : fallback;
}