<!-- Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. -->
<template>
  <div class="micro-topo-chart"></div>
</template>
<script lang="js">
  import * as d3 from 'd3';
  import d3tip from 'd3-tip';
  import zoom from './utils/zoom';
  import { simulationInit, simulationSkip } from './utils/simulation';
  import nodeElement from './utils/nodeElement';
  import { linkElement, anchorElement } from './utils/linkElement';
  import tool from './utils/tool';
  import topoLegend from './utils/legend';
  export default {
    props: {
      current: {
        type: Object,
        default: () => ({}),
      },
      nodes: {
        type: Array,
        default: () => [],
      },
      links: {
        type: Array,
        default: () => [],
      },
    },
    data() {
      return {
        height: 600,
        simulation: '',
      };
    },
    beforeDestroy() {
      window.removeEventListener('resize', this.resize);
    },
    mounted() {
      window.addEventListener('resize', this.resize);
      this.svg = d3
        .select(this.$el)
        .append('svg')
        .attr('class', 'topo-svg')
        .attr('height', this.$el.clientHeight);
      this.tip = d3tip()
        .attr('class', 'd3-tip')
        .offset([-8, 0]);
      this.graph = this.svg.append('g').attr('class', 'topo-svg_graph');
      this.graph.call(this.tip);
      this.simulation = simulationInit(d3, this.nodes, this.links, this.ticked);
      this.svg.call(zoom(d3, this.graph));
      this.node = this.graph.append('g').selectAll('.topo-node');
      this.link = this.graph.append('g').selectAll('.topo-line');
      this.anchor = this.graph.append('g').selectAll('.topo-line-anchor');
      this.tool = tool(this.graph, [
        {icon: 'API', click: this.handleGoEndpoint},
        {icon: 'INSTANCE', click: this.handleGoInstance},
        {icon: 'TRACE', click: this.handleGoTrace},
        {icon: 'ALARM', click: this.handleGoAlarm},
        {icon: 'ENDPOINT', click: this.handleGoEndpointDependency},
        {icon: ''},
      ]);
      // legend
      this.legend = this.graph.append('g').attr('class', 'topo-legend');
      topoLegend(this.legend, this.$el.clientHeight, this.$el.clientWidth);
      this.svg.on('click', (d, i) => {
        event.stopPropagation();
        event.preventDefault();
        this.$store.commit('rocketTopo/SET_NODE', {});
        this.$store.commit('rocketTopo/SET_LINK', {});
        this.$store.dispatch('rocketTopo/CLEAR_TOPO_INFO');
        this.tool.attr('style', 'display: none');
      });
    },
    watch: {
      nodes: 'update',
      links: 'update',
    },
    methods: {
      // alarm hexagon
      handleGoAlarm() {
        this.$emit('setDialog', 'alarm');
      },
      // trace hexagon
      handleGoTrace() {
        this.$emit('setDialog', 'trace');
      },
      // instace hexagon
      handleGoInstance() {
        this.$emit('setDialog', 'instance');
      },
      // endpoint hexagon
      handleGoEndpoint() {
        this.$store.dispatch('SELECT_SERVICE', {
          service: { key: this.current.id, label: this.current.name },
          duration: this.$store.getters.durationTime,
        });
        this.$emit('setDialog', 'endpoint');
      },
      // endpoint dependency hexagon
      handleGoEndpointDependency() {
        this.$emit('setDialog', 'endpoint_dependency');
      },
      handleNodeClick(d) {
        this.$emit('setCurrent', { key: d.id, label: d.name });
        const {x, y, vx, vy, fx, fy, index, ...rest} = d;
        this.$store.dispatch('rocketTopo/CLEAR_TOPO_INFO');
        this.$store.commit('rocketTopo/SET_NODE', rest);
        this.$store.commit('rocketTopo/SET_LINK', {});
      },
      handleLinkClick(d) {
        event.stopPropagation();
        this.$store.commit('rocketTopo/SET_NODE', {});
        this.$store.commit('rocketTopo/SET_LINK', d);
        this.$store.dispatch('rocketTopo/CLEAR_TOPO_INFO');
        this.$store.commit('rocketTopo/SET_MODE', d.detectPoints);
        this.$store.dispatch(this.$store.state.rocketTopo.mode ? 'rocketTopo/GET_TOPO_SERVICE_INFO' :
            'rocketTopo/GET_TOPO_CLIENT_INFO', { ...d, duration: this.$store.getters.durationTime });
        this.$store.commit('rocketTopo/SET_CALLBACK', () => {
          this.$store.dispatch(this.$store.state.rocketTopo.mode ? 'rocketTopo/GET_TOPO_SERVICE_INFO' :
            'rocketTopo/GET_TOPO_CLIENT_INFO', { ...d, duration: this.$store.getters.durationTime });
        });
      },
      resize() {
        this.svg.attr('height', this.$el.clientHeight);
      },
      update() {
        // node element
        this.node = this.node.data(this.nodes, (d) => d.id);
        this.node.exit().remove();
        this.node = nodeElement(d3, this.node.enter(), this.tool, {
          dragstart: this.dragstart,
          dragged: this.dragged,
          dragended: this.dragended,
          handleNodeClick: this.handleNodeClick,
        }, this.tip).merge(this.node);
        // line element
        this.link = this.link.data(this.links, (d) => d.id);
        this.link.exit().remove();
        this.link = linkElement(this.link.enter()).merge(this.link);
        // anchorElement
        this.anchor = this.anchor.data(this.links, (d) => d.id);
        this.anchor.exit().remove();
        this.anchor = anchorElement(this.anchor.enter(), {
          handleLinkClick: this.handleLinkClick,
          $tip: (data) =>
          `
            <div class="mb-5"><span class="grey">${this.$t('cpm')}: </span>${data.cpm}</div>
            <div class="mb-5"><span class="grey">${this.$t('latency')}: </span>${data.latency}</div>
            <div><span class="grey">${this.$t('detectPoint')}:</span>${data.detectPoints.join(' | ')}</div>
          `,
        }, this.tip).merge(this.anchor);
        // force element
        this.simulation.nodes(this.nodes);
        this.simulation.force('link').links(this.links).id((d) => d.id);
        simulationSkip(d3, this.simulation, this.ticked);
      },
      ticked() {
        this.link.attr('d', (d) => `M${d.source.x} ${d.source.y} Q ${(d.source.x + d.target.x) / 2} ${(d.target.y + d.source.y) / 2 - 90} ${d.target.x} ${d.target.y}`);
        this.anchor.attr('transform', (d) => `translate(${(d.source.x + d.target.x) / 2}, ${(d.target.y + d.source.y) / 2 - 45})`);
        this.node.attr('transform', (d) => `translate(${d.x - 22},${d.y - 22})`);
      },
      dragstart(d) {
        this.node._groups[0].forEach((g) => {
          g.__data__.fx = g.__data__.x;
          g.__data__.fy = g.__data__.y;
        });
        if (!d3.event.active) {
          this.simulation.alphaTarget(0.1).restart();
        }
        d3.event.sourceEvent.stopPropagation();
      },
      dragged(d) {
        d.fx = d3.event.x;
        d.fy = d3.event.y;
        d.x = d.fx;
        d.y = d.fy;
      },
      dragended() {
        if (!d3.event.active) {
          this.simulation.alphaTarget(0);
        }
      },
    },
  };
</script>
<style lang="scss">
  .micro-topo-chart {
    height: 100%;
    width: 100%;
    .topo-svg {
      display: block;
      width: 100%;
    }
    .topo-line {
      stroke-linecap: round;
      stroke-width: 1.3px !important;
      stroke-dasharray: 13 7;
      fill: none;
      animation: topo-dash 1s linear infinite !important;
    }
    .topo-line-anchor {
      cursor: pointer;
    }
    .topo-text {
      font-family: 'Lato', 'Source Han Sans CN', 'Microsoft YaHei', sans-serif;
      fill: #ddd;
      font-size: 11px;
      opacity: 0.8;
    }
    .topo-tool {
      display: none;
    }
    .topo-tool-i {
      cursor: pointer;
      .tool-hexagon {
        fill: #3f4450;
        stroke: #217ef2;
        stroke-width: 2;
        stroke-opacity: 0.5;
      }
      &:hover {
        .tool-hexagon {
          stroke-opacity: 1;
        }
      }
    }
  }
  @keyframes topo-dash {
    from {
      stroke-dashoffset: 20;
    }
    to {
      stroke-dashoffset: 0;
    }
  }
</style>
