/**
 * @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, NumericChangeId} 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 as NumericChangeId}
      .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');
  });
});
