// Copyright 2023 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only

import { assert } from 'chai';

import * as durations from '../../util/durations';
import type { Bootstrap, App } from '../bootstrap';
import {
  artAddStickersRoute,
  showConversationRoute,
} from '../../util/signalRoutes';
import {
  initStorage,
  STICKER_PACKS,
  storeStickerPacks,
} from '../storage/fixtures';
import { strictAssert } from '../../util/assert';

describe('routing', function (this: Mocha.Suite) {
  this.timeout(durations.MINUTE);

  let bootstrap: Bootstrap;
  let app: App;

  beforeEach(async () => {
    ({ bootstrap, app } = await initStorage());
  });

  afterEach(async function (this: Mocha.Context) {
    await bootstrap.maybeSaveLogs(this.currentTest, app);
    await app.close();
    await bootstrap.teardown();
  });

  it('artAddStickersRoute', async () => {
    const { server } = bootstrap;
    const stickerPack = STICKER_PACKS[0];
    await storeStickerPacks(server, [stickerPack]);
    const stickerUrl = artAddStickersRoute.toWebUrl({
      packId: stickerPack.id.toString('hex'),
      packKey: stickerPack.key.toString('hex'),
    });
    await app.openSignalRoute(stickerUrl);
    const page = await app.getWindow();
    const title = page.locator(
      '.module-sticker-manager__preview-modal__footer--title',
      { hasText: 'Test Stickerpack' }
    );
    await title.waitFor();
    assert.isTrue(await title.isVisible());
  });

  it('showConversationRoute', async () => {
    const { contacts } = bootstrap;
    const [friend] = contacts;
    const page = await app.getWindow();
    await page.locator('#LeftPane').waitFor();
    const conversationId = await page.evaluate(
      serviceId => window.SignalCI?.getConversationId(serviceId),
      friend.toContact().aci
    );
    strictAssert(
      typeof conversationId === 'string',
      'conversationId must exist'
    );
    const conversationUrl = showConversationRoute.toAppUrl({
      conversationId,
      messageId: null,
      storyId: null,
    });
    await app.openSignalRoute(conversationUrl);
    const title = page.locator(
      '.module-ConversationHeader__header__info__title',
      { hasText: 'Alice Smith' }
    );
    await title.waitFor();
    assert.isTrue(await title.isVisible());
  });
});