import { expect, test } from '@playwright/test'
import path from 'node:path'

const REQUESTS_HAR1 = path.join(__dirname, 'requests/api-dashboard1.har')
const REQUESTS_HAR2 = path.join(__dirname, 'requests/api-dashboard2.har')
const REQUESTS_HAR3 = path.join(__dirname, 'requests/api-dashboard3.har')
const REQUESTS_HAR4 = path.join(__dirname, 'requests/api-dashboard4.har')

test('dashboard inbox link', async ({ page }) => {
  await page.routeFromHAR(REQUESTS_HAR1, { notFound: 'fallback' })
  await page.goto('/dashboard')
  await page.getByRole('link', { name: 'Documents in inbox' }).click()
  await expect(page).toHaveURL(/tags__id__in=9/)
  await expect(page.locator('pngx-document-list')).toHaveText(/8 documents/)
})

test('dashboard total documents link', async ({ page }) => {
  await page.routeFromHAR(REQUESTS_HAR2, { notFound: 'fallback' })
  await page.goto('/dashboard')
  await page.getByRole('link').filter({ hasText: 'Total documents' }).click()
  await expect(page).toHaveURL(/documents/)
  await expect(page.locator('pngx-document-list')).toHaveText(/61 documents/)
  await page.getByRole('button', { name: 'Reset filters' })
})

test('dashboard saved view show all', async ({ page }) => {
  await page.routeFromHAR(REQUESTS_HAR3, { notFound: 'fallback' })
  await page.goto('/dashboard')
  await page
    .locator('pngx-widget-frame')
    .filter({ hasText: 'Inbox' })
    .getByRole('link', { name: 'Show all' })
    .first()
    .click()
  await expect(page).toHaveURL(/view\/7/)
  await expect(page.locator('pngx-document-list')).toHaveText(/8 documents/)
})

test('dashboard saved view document links', async ({ page }) => {
  await page.routeFromHAR(REQUESTS_HAR4, { notFound: 'fallback' })
  await page.goto('/dashboard')
  await page
    .locator('pngx-widget-frame')
    .filter({ hasText: 'Inbox' })
    .locator('table')
    .getByRole('link', { name: /test/ })
    .first()
    .click({ position: { x: 0, y: 0 } })
  await expect(page).toHaveURL(/documents\/310\/details/)
})

test('test slim sidebar', async ({ page }) => {
  await page.routeFromHAR(REQUESTS_HAR1, { notFound: 'fallback' })
  await page.goto('/dashboard')
  await page.locator('#sidebarMenu').getByRole('button').click()
  await expect(
    page.getByRole('link', { name: 'Dashboard' }).getByText('Dashboard')
  ).toBeHidden()
  await page.locator('#sidebarMenu').getByRole('button').click()
  await expect(
    page.getByRole('link', { name: 'Dashboard' }).getByText('Dashboard')
  ).toBeVisible()
})