<template>
  <div :class="isFullWindow ? 'full-window-container' : 'terminal-container'">
    <template>
      <b-row class="d-flex">
        <b-col class="d-flex flex-column justify-content-end">
          <dl class="mb-2" sm="6" md="6">
            <dt class="d-inline font-weight-bold mr-1">
              {{ $t('pageSerialOverLan.status') }}:
            </dt>
            <dd class="d-inline">
              <status-icon :status="hostStatusIcon" /> {{ connectionStatus }}
            </dd>
          </dl>
        </b-col>

        <b-col v-if="!isFullWindow" class="d-flex justify-content-end">
          <b-button
            variant="link"
            type="button"
            class="pr-0 button-launch"
            @click="openConsoleWindow()"
          >
            <icon-launch aria-hidden="true" />

            {{ $t('pageSerialOverLan.openNewTab') }}
          </b-button>
        </b-col>
      </b-row>
    </template>
    <div id="terminal" ref="panel"></div>
  </div>
</template>

<script>
import { AttachAddon } from 'xterm-addon-attach';
import { FitAddon } from 'xterm-addon-fit';
import { Terminal } from 'xterm';
import IconLaunch from '@carbon/icons-vue/es/launch/20';
import StatusIcon from '@/components/Global/StatusIcon';

export default {
  name: 'SerialOverLanConsole',
  components: {
    IconLaunch,
    StatusIcon,
  },
  props: {
    isFullWindow: {
      type: Boolean,
      default: true,
    },
  },
  computed: {
    hostStatus() {
      return this.$store.getters['global/hostStatus'];
    },
    hostStatusIcon() {
      return this.hostStatus === 'on' ? 'success' : 'danger';
    },
    connectionStatus() {
      return this.hostStatus === 'on'
        ? this.$t('pageSerialOverLan.connected')
        : this.$t('pageSerialOverLan.disconnected');
    },
  },
  created() {
    this.$store.dispatch('global/getHostStatus');
  },
  mounted() {
    this.openTerminal();
  },
  methods: {
    openTerminal() {
      const token = this.$store.getters['authentication/token'];

      const ws = new WebSocket(`wss://${window.location.host}/console0`, [
        token,
      ]);

      // Refer https://github.com/xtermjs/xterm.js/ for xterm implementation and addons.

      const term = new Terminal({
        fontSize: 15,
        fontFamily:
          'SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace',
      });

      const attachAddon = new AttachAddon(ws);
      term.loadAddon(attachAddon);

      const fitAddon = new FitAddon();
      term.loadAddon(fitAddon);

      const SOL_THEME = {
        background: '#19273c',
        cursor: 'rgba(83, 146, 255, .5)',
        scrollbar: 'rgba(83, 146, 255, .5)',
      };
      term.setOption('theme', SOL_THEME);

      term.open(this.$refs.panel);
      fitAddon.fit();

      try {
        ws.onopen = function () {
          console.log('websocket console0/ opened');
        };
        ws.onclose = function (event) {
          console.log(
            'websocket console0/ closed. code: ' +
              event.code +
              ' reason: ' +
              event.reason
          );
        };
      } catch (error) {
        console.log(error);
      }
    },
    openConsoleWindow() {
      window.open(
        '#/console/serial-over-lan-console',
        '_blank',
        'directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=yes,width=600,height=550'
      );
    },
  },
};
</script>

<style lang="scss" scoped>
@import '~xterm/css/xterm.css';

.terminal-container {
  #terminal {
    overflow: auto;
  }
}
@include media-breakpoint-up(xs) {
  .terminal-container {
    width: 100%;
  }
}
@include media-breakpoint-up(sm) {
  .terminal-container {
    width: 80%;
  }
}
@include media-breakpoint-up(md) {
  .terminal-container {
    width: 65%;
  }
}
@include media-breakpoint-up(lg) {
  .terminal-container {
    width: 80%;
  }
}
@include media-breakpoint-up(xl) {
  .terminal-container {
    width: 60%;
  }
}

.full-window-container {
  width: 97%;
  max-width: 960px;
  margin: 1.5%;
  #terminal {
    overflow: auto;
  }
}
</style>
