import { describe, it, before, after } from 'mocha'
import { assert, expect } from 'chai'
import { By } from 'selenium-webdriver'
import {
  getRootAndWait,
  getActionButtons,
  getNavigationLinks,
  openSidebar,
  closeSidebar,
  takeScreenshotOnFailure,
} from '../lib/elements.js'

describe('config: onlyDashboards', function () {
  before(async function () {
    await runner.start('onlyDashboards')
  })

  after(async () => {
    await runner.stop()
  })

  afterEach(function () {
    takeScreenshotOnFailure(this.currentTest, webdriver);
  });

  it('When there are only dashboards, actions are hidden', async function () {
    await getRootAndWait()

    await openSidebar()

    const navLinks = await getNavigationLinks()
    expect(navLinks).to.not.be.empty

    for (const link of navLinks) {
      console.log(await link.getAttribute('title'))
    }

    const firstLink = await navLinks[0];
    assert.isNotNull(firstLink, 'Actions link should not be null')

    assert.equal(await firstLink.getAttribute('title'), 'My Dashboard', 'First link should have the title "My Dashboard"')

    const firstDashboardLink = await webdriver.findElement(By.css('li[title="My Dashboard"]'), 'The first dashboard link should be present')
    assert.isNotNull(firstDashboardLink, 'First dashboard link should not be null')
    assert.isTrue(await firstDashboardLink.isDisplayed(), 'First dashboard link should be displayed')
    
    const actionButtonsOnDashboard = await getActionButtons()
    assert.isArray(actionButtonsOnDashboard, 'Action buttons on dashboard should be an array')
    assert.lengthOf(actionButtonsOnDashboard, 3, 'Action buttons on dashboard should have 3 buttons')
  })
})
