import { createNext, FileRef } from 'e2e-utils'
import { NextInstance } from 'test/lib/next-modes/base'
import { check } from 'next-test-utils'
import { join } from 'path'
import webdriver from 'next-webdriver'

const locales = ['', '/en', '/sv', '/nl']

describe('i18n-ignore-redirect-source-locale', () => {
  let next: NextInstance

  beforeAll(async () => {
    next = await createNext({
      files: {
        pages: new FileRef(join(__dirname, 'app/pages')),
      },
      dependencies: {},
      nextConfig: {
        i18n: {
          locales: ['en', 'sv', 'nl'],
          defaultLocale: 'en',
        },
        async redirects() {
          return [
            {
              source: '/:locale/to-sv',
              destination: '/sv/newpage',
              permanent: false,
              locale: false,
            },
            {
              source: '/:locale/to-en',
              destination: '/en/newpage',
              permanent: false,
              locale: false,
            },
            {
              source: '/:locale/to-slash',
              destination: '/newpage',
              permanent: false,
              locale: false,
            },
            {
              source: '/:locale/to-same',
              destination: '/:locale/newpage',
              permanent: false,
              locale: false,
            },
          ]
        },
      },
    })
  })
  afterAll(() => next.destroy())

  test.each(locales)(
    'get redirected to the new page, from: %s to: sv',
    async (locale) => {
      const browser = await webdriver(next.url, `${locale}/to-sv`)
      await check(() => browser.elementById('current-locale').text(), 'sv')
    }
  )

  test.each(locales)(
    'get redirected to the new page, from: %s to: en',
    async (locale) => {
      const browser = await webdriver(next.url, `${locale}/to-en`)
      await check(() => browser.elementById('current-locale').text(), 'en')
    }
  )

  test.each(locales)(
    'get redirected to the new page, from: %s to: /',
    async (locale) => {
      const browser = await webdriver(next.url, `${locale}/to-slash`)
      await check(() => browser.elementById('current-locale').text(), 'en')
    }
  )

  test.each(locales)(
    'get redirected to the new page, from and to: %s',
    async (locale) => {
      const browser = await webdriver(next.url, `${locale}/to-same`)
      await check(
        () => browser.elementById('current-locale').text(),
        locale === '' ? 'en' : locale.slice(1)
      )
    }
  )
})
