<template>
  <div class="quicklinks">
    <div>
      <dl>
        <dt>{{ $t('pageOverview.quicklinks.bmcTime') }}</dt>
        <dd v-if="bmcTime">
          {{ bmcTime | formatDate }} {{ bmcTime | formatTime }}
        </dd>
        <dd v-else>--</dd>
      </dl>
    </div>
    <div>
      <dl>
        <dt>{{ $t('pageOverview.quicklinks.serverLed') }}</dt>
        <dd>
          <b-form-checkbox
            v-model="serverLedChecked"
            data-test-id="overviewQuickLinks-checkbox-serverLed"
            name="check-button"
            switch
            value="Lit"
            unchecked-value="Off"
            @change="onChangeServerLed"
          >
            <span v-if="serverLedChecked !== 'Off'">
              {{ $t('global.status.on') }}
            </span>
            <span v-else>{{ $t('global.status.off') }}</span>
          </b-form-checkbox>
        </dd>
      </dl>
    </div>
    <div>
      <b-button
        to="/configuration/network-settings"
        variant="secondary"
        data-test-id="overviewQuickLinks-button-networkSettings"
        class="d-flex justify-content-between align-items-center"
      >
        <span>{{ $t('pageOverview.quicklinks.editNetworkSettings') }}</span>
        <icon-arrow-right />
      </b-button>
    </div>
    <div>
      <b-button
        to="/control/serial-over-lan"
        variant="secondary"
        data-test-id="overviewQuickLinks-button-solConsole"
        class="d-flex justify-content-between align-items-center"
      >
        <span>{{ $t('pageOverview.quicklinks.solConsole') }}</span>
        <icon-arrow-right />
      </b-button>
    </div>
  </div>
</template>

<script>
import ArrowRight16 from '@carbon/icons-vue/es/arrow--right/16';
import BVToastMixin from '@/components/Mixins/BVToastMixin';

export default {
  name: 'QuickLinks',
  components: {
    IconArrowRight: ArrowRight16
  },
  mixins: [BVToastMixin],
  computed: {
    bmcTime() {
      return this.$store.getters['global/bmcTime'];
    },
    serverLedChecked: {
      get() {
        return this.$store.getters['serverLed/getIndicatorValue'];
      },
      set(value) {
        return value;
      }
    }
  },
  created() {
    Promise.all([
      this.$store.dispatch('global/getBmcTime'),
      this.$store.dispatch('serverLed/getIndicatorValue')
    ]).finally(() => {
      this.$root.$emit('overview::quicklinks::complete');
    });
  },
  methods: {
    onChangeServerLed(value) {
      this.$store
        .dispatch('serverLed/saveIndicatorLedValue', value)
        .then(message => this.successToast(message))
        .catch(({ message }) => this.errorToast(message));
    }
  }
};
</script>

<style lang="scss" scoped>
@import 'src/assets/styles/helpers';

dd,
dl {
  margin: 0;
}

.quicklinks {
  background: gray('200');
  display: grid;
  grid-gap: 1rem;
  padding: 1rem;
  white-space: nowrap;
  align-items: center;
}

@include media-breakpoint-up(sm) {
  .quicklinks {
    grid-template-columns: repeat(2, 1fr);
  }
}

@include media-breakpoint-up(xl) {
  .quicklinks {
    grid-template-columns: repeat(4, 1fr);
  }
}
</style>
