import { Terminal } from '@xterm/xterm';
// import { FitAddon } from 'xterm-addon-fit';
import '@xterm/xterm/css/xterm.css';
import io from 'socket.io-client';
const term = new Terminal();
term.open(document.getElementById('terminal') as HTMLElement);
// term.write('Hello from \x1B[1;3;31mxterm.js\x1B[0m $ ');
let input = '';
term.onData((data) => {
  // socket.emit('input', { name: 'tab', data });
  if (data === '\b' || data === '\x7F') {
    console.log('blank data\b');
    input = input.slice(0, -1);
    term.write('\b \b');
    return;
  }
  input += data;
  if (data === '\r') {
    console.log('input', input);
    socket.emit('tab-input', input);
    input = '';
  } 
  term.write(data);
});
// term.on
term.onResize(({ cols, rows }) => {
  term.resize(cols, rows);
});

const socket = io(window.location.origin + '/terminal', { path: '/terminal', reconnection: true });
socket.connect();
const termialTab0 = { name: 'tab', children: [] };
const createTerminal = (tab: any) => {
  const name = tab.name;
  const cwd = null;
  socket.emit('create', { name: name });
};
socket.on('connect', () => {
  console.log('connect');
  createTerminal(termialTab0);
});
socket.on('message', (data: any) => {
  console.log('message', data);
});

socket.on('tab-output', (data: any) => {
  console.log('tab-output', data);
  term.write(data);
});
socket.on('tab-pid', (data: any) => {
  console.log('tab-pid-data', data);
});

const inputEl = document.querySelector('#input') as HTMLInputElement;
const send = document.querySelector('#send');

send?.addEventListener('click', () => {
  const data = inputEl?.value;
  socket.emit('tab-input', data);
});
