/**
 * @license
 * Copyright 2016 Google LLC
 * SPDX-License-Identifier: Apache-2.0
 */
import * as sinon from 'sinon';
import '../../../test/common-test-setup';
import '../gr-diff/gr-diff-line';
import './gr-ranged-comment-layer';
import {GrRangedCommentLayer} from './gr-ranged-comment-layer';
import {GrDiffLine} from '../gr-diff/gr-diff-line';
import {GrDiffLineType, Side, CommentRangeLayer} from '../../../api/diff';
import {SinonStub} from 'sinon';
import {assert} from '@open-wc/testing';
import {GrAnnotationImpl} from '../gr-diff-highlight/gr-annotation';

const rangeA: CommentRangeLayer = {
  side: Side.LEFT,
  range: {
    end_character: 9,
    end_line: 39,
    start_character: 6,
    start_line: 36,
  },
  id: 'a',
};

const rangeB: CommentRangeLayer = {
  side: Side.RIGHT,
  range: {
    end_character: 22,
    end_line: 12,
    start_character: 10,
    start_line: 10,
  },
  id: 'b',
};

const rangeC: CommentRangeLayer = {
  side: Side.RIGHT,
  range: {
    end_character: 15,
    end_line: 100,
    start_character: 5,
    start_line: 100,
  },
};

const rangeD: CommentRangeLayer = {
  side: Side.RIGHT,
  range: {
    end_character: 2,
    end_line: 55,
    start_character: 32,
    start_line: 55,
  },
  id: 'd',
};

const rangeE: CommentRangeLayer = {
  side: Side.RIGHT,
  range: {
    end_character: 1,
    end_line: 71,
    start_character: 1,
    start_line: 60,
  },
};

const rangeF: CommentRangeLayer = {
  side: Side.RIGHT,
  range: {
    end_character: 0,
    end_line: 24,
    start_character: 0,
    start_line: 23,
  },
};

suite('gr-ranged-comment-layer', () => {
  let element: GrRangedCommentLayer;

  setup(() => {
    const initialCommentRanges: CommentRangeLayer[] = [
      rangeA,
      rangeB,
      rangeC,
      rangeD,
      rangeE,
      rangeF,
    ];

    element = new GrRangedCommentLayer();
    element.updateRanges(initialCommentRanges);
  });

  suite('annotate', () => {
    let el: HTMLDivElement;
    let line: GrDiffLine;
    let annotateElementStub: SinonStub;
    const lineNumberEl = document.createElement('td');

    function assertHasRange(
      commentRange: CommentRangeLayer,
      hasRange: boolean
    ) {
      assertHasRangeOn(
        commentRange.side,
        commentRange.range.start_line,
        hasRange
      );
    }

    function assertHasRangeOn(
      side: Side,
      lineNumber: number,
      hasRange: boolean
    ) {
      line = new GrDiffLine(GrDiffLineType.BOTH);
      if (side === Side.LEFT) line.beforeNumber = lineNumber;
      if (side === Side.RIGHT) line.afterNumber = lineNumber;
      el.setAttribute('data-side', side);

      element.annotate(el, lineNumberEl, line);

      assert.equal(annotateElementStub.called, hasRange);
      annotateElementStub.reset();
    }

    setup(() => {
      annotateElementStub = sinon.stub(GrAnnotationImpl, 'annotateElement');
      el = document.createElement('div');
      el.setAttribute('data-side', Side.LEFT);
      line = new GrDiffLine(GrDiffLineType.BOTH);
      line.text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit,';
    });

    test('type=Remove no-comment', () => {
      line = new GrDiffLine(GrDiffLineType.REMOVE);
      line.beforeNumber = 40;

      element.annotate(el, lineNumberEl, line);

      assert.isFalse(annotateElementStub.called);
    });

    test('type=Remove has-comment', () => {
      line = new GrDiffLine(GrDiffLineType.REMOVE);
      line.beforeNumber = 36;
      const expectedStart = 6;
      const expectedLength = line.text.length - expectedStart;

      element.annotate(el, lineNumberEl, line);

      assert.isTrue(annotateElementStub.called);
      const lastCall = annotateElementStub.lastCall;
      assert.equal(lastCall.args[0], el);
      assert.equal(lastCall.args[1], expectedStart);
      assert.equal(lastCall.args[2], expectedLength);
      assert.equal(lastCall.args[3], 'range rangeHighlight generated_a');
    });

    test('type=Both has-comment', () => {
      line = new GrDiffLine(GrDiffLineType.BOTH);
      line.beforeNumber = 36;

      const expectedStart = 6;
      const expectedLength = line.text.length - expectedStart;

      element.annotate(el, lineNumberEl, line);

      assert.isTrue(annotateElementStub.called);
      const lastCall = annotateElementStub.lastCall;
      assert.equal(lastCall.args[0], el);
      assert.equal(lastCall.args[1], expectedStart);
      assert.equal(lastCall.args[2], expectedLength);
      assert.equal(lastCall.args[3], 'range rangeHighlight generated_a');
    });

    test('type=Both has-comment off side', () => {
      line = new GrDiffLine(GrDiffLineType.BOTH);
      line.beforeNumber = 36;
      el.setAttribute('data-side', Side.RIGHT);

      element.annotate(el, lineNumberEl, line);

      assert.isFalse(annotateElementStub.called);
    });

    test('type=Add has-comment', () => {
      line = new GrDiffLine(GrDiffLineType.ADD);
      line.afterNumber = 12;
      el.setAttribute('data-side', Side.RIGHT);

      const expectedStart = 0;
      const expectedLength = 22;

      element.annotate(el, lineNumberEl, line);

      assert.isTrue(annotateElementStub.called);
      const lastCall = annotateElementStub.lastCall;
      assert.equal(lastCall.args[0], el);
      assert.equal(lastCall.args[1], expectedStart);
      assert.equal(lastCall.args[2], expectedLength);
      assert.equal(lastCall.args[3], 'range rangeHighlight generated_b');
    });

    test('long range comment', () => {
      line = new GrDiffLine(GrDiffLineType.ADD);
      line.afterNumber = 65;
      el.setAttribute('data-side', Side.RIGHT);

      element.annotate(el, lineNumberEl, line);

      assert.isTrue(annotateElementStub.called);
      assert.equal(
        annotateElementStub.lastCall.args[3],
        'range generated_right-60-1-71-1'
      );
    });

    test('do not annotate lines with end_character 0', () => {
      line = new GrDiffLine(GrDiffLineType.BOTH);
      line.afterNumber = 24;
      el.setAttribute('data-side', Side.RIGHT);

      element.annotate(el, lineNumberEl, line);

      assert.isFalse(annotateElementStub.called);
    });

    test('updateRanges remove all', () => {
      assertHasRange(rangeA, true);
      assertHasRange(rangeB, true);
      assertHasRange(rangeC, true);
      assertHasRange(rangeD, true);
      assertHasRange(rangeE, true);

      element.updateRanges([]);

      assertHasRange(rangeA, false);
      assertHasRange(rangeB, false);
      assertHasRange(rangeC, false);
      assertHasRange(rangeD, false);
      assertHasRange(rangeE, false);
    });

    test('updateRanges remove A and C', () => {
      assertHasRange(rangeA, true);
      assertHasRange(rangeB, true);
      assertHasRange(rangeC, true);
      assertHasRange(rangeD, true);
      assertHasRange(rangeE, true);

      element.updateRanges([rangeB, rangeD, rangeE]);

      assertHasRange(rangeA, false);
      assertHasRange(rangeB, true);
      assertHasRange(rangeC, false);
      assertHasRange(rangeD, true);
      assertHasRange(rangeE, true);
    });

    test('updateRanges add B and D', () => {
      element.updateRanges([]);

      assertHasRange(rangeA, false);
      assertHasRange(rangeB, false);
      assertHasRange(rangeC, false);
      assertHasRange(rangeD, false);
      assertHasRange(rangeE, false);

      element.updateRanges([rangeB, rangeD]);

      assertHasRange(rangeA, false);
      assertHasRange(rangeB, true);
      assertHasRange(rangeC, false);
      assertHasRange(rangeD, true);
      assertHasRange(rangeE, false);
    });

    test('updateRanges add A, remove B', () => {
      element.updateRanges([rangeB, rangeC]);

      assertHasRange(rangeA, false);
      assertHasRange(rangeB, true);
      assertHasRange(rangeC, true);

      element.updateRanges([rangeA, rangeC]);

      assertHasRange(rangeA, true);
      assertHasRange(rangeB, false);
      assertHasRange(rangeC, true);
    });

    test('_getRangesForLine normalizes invalid ranges', () => {
      const line = new GrDiffLine(GrDiffLineType.BOTH);
      line.afterNumber = 55;
      line.text = 'getRangesForLine normalizes invalid ranges';
      const ranges = element.getRangesForLine(line, Side.RIGHT);
      assert.equal(ranges.length, 1);
      const range = ranges[0];
      assert.isTrue(range.start < range.end, 'start and end are normalized');
      assert.equal(range.end, line.text.length);
    });
  });
});
