/**
 * @license
 * Copyright 2026 Google LLC
 * SPDX-License-Identifier: Apache-2.0
 */
import '../../../test/common-test-setup';
import './gr-diff-host';
import {GrDiffHost} from './gr-diff-host';
import {fixture, html} from '@open-wc/testing';
// Until https://github.com/modernweb-dev/web/issues/2804 is fixed
// @ts-expect-error
import {visualDiff} from '@web/test-runner-visual-regression';
import {stubRestApi, visualDiffDarkTheme} from '../../../test/test-utils';
import {createDefaultDiffPrefs} from '../../../constants/constants';
import {
  createChange,
  createPatchRange,
} from '../../../test/test-data-generators';
import {EDIT} from '../../../types/common';
import {DiffInfo, DiffViewMode} from '../../../api/diff';

suite('gr-diff-host screenshot tests', () => {
  let element: GrDiffHost;

  setup(async () => {
    const diff: DiffInfo = {
      meta_a: {
        name: 'sample.ts',
        content_type: 'application/typescript',
        lines: 10,
      },
      meta_b: {
        name: 'sample.ts',
        content_type: 'application/typescript',
        lines: 10,
      },
      change_type: 'MODIFIED',
      intraline_status: 'OK',
      content: [
        {
          ab: [
            '// Copyright 2026 Google LLC',
            'import {LitElement, html} from "lit";',
            '',
          ],
        },
        {
          a: [
            'export function calculateSum(a: number, b: number): number {',
            '  return a + b;',
            '}',
          ],
          b: [
            'export function calculateSum(x: number, y: number): number {',
            '  // Updated implementation',
            '  return x + y;',
            '}',
          ],
        },
        {
          ab: [
            '',
            'export function helper(): void {',
            '  console.log("ready");',
          ],
        },
        {
          a: ['  console.log("old debug line");'],
        },
        {
          ab: ['}'],
        },
        {
          b: ['', '// Added at end of file', 'export const VERSION = 2;'],
        },
      ],
    };

    stubRestApi('getDiff').resolves(diff);
    element = await fixture<GrDiffHost>(html`<gr-diff-host
      .changeNum=${42}
      .path=${'sample.ts'}
      .change=${createChange()}
      .patchRange=${{
        ...createPatchRange(),
        patchNum: EDIT,
      }}
      .prefs=${createDefaultDiffPrefs()}
    ></gr-diff-host>`);
    await element.reload(true);
    await element.updateComplete;
  });

  test('edit mode diff with revert buttons', async () => {
    await visualDiff(element, 'gr-diff-host-edit-mode-revert');
    await visualDiffDarkTheme(element, 'gr-diff-host-edit-mode-revert');
  });

  test('unified edit mode diff with revert buttons', async () => {
    element.viewMode = DiffViewMode.UNIFIED;
    await element.updateComplete;

    await visualDiff(element, 'gr-diff-host-edit-mode-revert-unified');
    await visualDiffDarkTheme(element, 'gr-diff-host-edit-mode-revert-unified');
  });
});
