/**
 * @license
 * Copyright 2025 Google LLC
 * SPDX-License-Identifier: Apache-2.0
 */
import '../../../test/common-test-setup';
import './gr-user-suggestion-fix';
import {fixture, html} from '@open-wc/testing';
// Until https://github.com/modernweb-dev/web/issues/2804 is fixed
// @ts-ignore
import {visualDiff} from '@web/test-runner-visual-regression';
import {GrUserSuggestionsFix} from './gr-user-suggestion-fix';
import {
  createComment,
  createFixSuggestionInfo,
} from '../../../test/test-data-generators';
import {wrapInProvider} from '../../../models/di-provider-element';
import {commentModelToken} from '../gr-comment-model/gr-comment-model';
import {CommentModel} from '../gr-comment-model/gr-comment-model';
import {getAppContext} from '../../../services/app-context';
import {stubFlags, visualDiffDarkTheme} from '../../../test/test-utils';

suite('gr-user-suggestion-fix screenshot tests', () => {
  let element: GrUserSuggestionsFix;

  setup(async () => {
    stubFlags('isEnabled').returns(true);
    const commentModel = new CommentModel(getAppContext().restApiService);
    commentModel.updateState({
      comment: createComment(),
      commentedText: 'const result = data.map(item => item.value);',
    });
    element = (
      await fixture<GrUserSuggestionsFix>(
        wrapInProvider(
          html`<gr-user-suggestion-fix
            >const result = data.map(item =>
            item.value).filter(Boolean);</gr-user-suggestion-fix
          >`,
          commentModelToken,
          commentModel
        )
      )
    ).querySelector<GrUserSuggestionsFix>('gr-user-suggestion-fix')!;
  });

  test('screenshot', async () => {
    await element.updateComplete;
    // mock preview because it's calculated on backend
    element.suggestionDiffPreview!.previewLoadedFor = createFixSuggestionInfo();
    element.suggestionDiffPreview!.preview = {
      filepath: 'test.ts',
      preview: {
        meta_a: {
          name: 'test.ts',
          content_type: 'application/typescript',
          lines: 6,
        },
        meta_b: {
          name: 'test.ts',
          content_type: 'application/typescript',
          lines: 6,
        },
        intraline_status: 'OK',
        change_type: 'MODIFIED',
        content: [
          {
            ab: ['export class Test {'],
          },
          {
            a: ['  private oldMethod() {', '    console.log("old");', '  }'],
            b: ['  private newMethod() {', '    console.log("new");', '  }'],
            edit_a: [
              [24, 2],
              [23, 2],
              [27, 2],
            ],
            edit_b: [],
          },
          {
            ab: ['}'],
          },
        ],
      },
    };
    await visualDiff(element, 'gr-user-suggestion-fix');
    await visualDiffDarkTheme(element, 'gr-user-suggestion-fix');
  });
});
