/* eslint-disable dot-notation */
import './index';
import { assert } from 'chai';
import {
  PlotSummarySk,
  PlotSummarySkSelectionEventDetails,
} from './plot-summary-sk';

import { setUpElementUnderTest } from '../../../infra-sk/modules/test_util';
import { ChartAxisFormat, ChartData } from '../common/plot-builder';

describe('plot-summary-sk', () => {
  const newInstance = setUpElementUnderTest<PlotSummarySk>('plot-summary-sk');

  let element: PlotSummarySk;

  describe('Selection', () => {
    let lastEvent: PlotSummarySkSelectionEventDetails;
    beforeEach(() => {
      element = newInstance((el: PlotSummarySk) => {
        el.addEventListener('summary_selected', (e) => {
          lastEvent = (e as CustomEvent<PlotSummarySkSelectionEventDetails>)
            .detail;
        });
      });
    });

    it('Select an area', async () => {
      const chartData: ChartData = {
        lines: {
          test: [
            { x: 1, y: 1, anomaly: null },
            { x: 2, y: 2, anomaly: null },
            { x: 3, y: 3, anomaly: null },
            { x: 4, y: 4, anomaly: null },
            { x: 5, y: 5, anomaly: null },
            { x: 6, y: 6, anomaly: null },
            { x: 7, y: 7, anomaly: null },
            { x: 8, y: 8, anomaly: null },
            { x: 9, y: 9, anomaly: null },
          ],
        },
        chartAxisFormat: ChartAxisFormat.Commit,
        xLabel: 'xLabel',
        yLabel: 'yLabel',
        start: 1,
        end: 9,
      };
      element.style.width = '10px';
      element.style.display = 'inline-block';
      element.requestUpdate();
      await element.updateComplete;

      element.DisplayChartData(chartData, true);
      await element.updateComplete;
      element.Select(3, 7);

      // Because of how d3scale works, we will not get the exact
      // values in the event
      const selectionRange = element['selectionRange'];
      assert.approximately(3, Math.floor(selectionRange![0]), 1);
      assert.approximately(7, Math.floor(selectionRange![1]), 1);
    });
  });
});
