// ***********************************************
// This example commands.js shows you how to
// create various custom commands and overwrite
// existing commands.
//
// For more comprehensive examples of custom
// commands please read more here:
// https://on.cypress.io/custom-commands
// ***********************************************
//
//
// -- This is a parent command --
// Cypress.Commands.add("login", (email, password) => { ... })
//
//
// -- This is a child command --
// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... })
//
//
// -- This is a dual command --
// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... })
//
//
// -- This will overwrite an existing command --
// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... })

import 'cypress-wait-until';

Cypress.Commands.add("landingSettings", (enabled) => {
    cy.fixture('login/landingPageSettings').then((settings)  => {
        settings.enabled = enabled;
        cy.intercept("GET", "**/Settings/LandingPage", settings).as("landingPageSettingsDisabled");
      })
})

Cypress.Commands.add('loginWithCreds', (username, password) => {
    cy.request({
        method: 'POST',
        url: '/api/v1/token',
        body: {
            username: username,
            password: password,
        }
    })
        .then((resp) => {
            window.localStorage.setItem('id_token', resp.body.access_token);
        });
  });

  Cypress.Commands.add('login', () => {
    cy.clearLocalStorage();
    cy.request({
        method: 'POST',
        url: '/api/v1/token',
        body: {
            username: Cypress.env('username'),
            password: Cypress.env('password'),
        }
    })
        .then((resp) => {
            window.localStorage.setItem('id_token', resp.body.access_token);
        });
  });

Cypress.Commands.add('removeLogin', () => {
  window.localStorage.removeItem('id_token');
});

Cypress.Commands.add('verifyNotification', (text) => {
    cy.contains(text, {timeout: 10000});
});

Cypress.Commands.add('createUser', (username, password, claims) => {
    cy.request({
        method: 'POST',
        url: '/api/v1/identity',
        body: {
            UserName: username,
            Password: password,
            Claims: claims,
        },
        headers: {
            'Authorization': 'Bearer ' + window.localStorage.getItem('id_token'),
        }
    })
})

Cypress.Commands.add('generateUniqueId', () => {
    const uniqueSeed = Date.now().toString();
    const id = Cypress._.uniqueId(uniqueSeed);
    cy.wrap(id);
});

Cypress.Commands.add("getByData", (selector, ...args) => {
  return cy.get(`[data-test=${selector}]`, ...args);
});


Cypress.Commands.add("getByData", (selector) => {
    return cy.get(`[data-test=${selector}]`);
  });

  Cypress.Commands.add("getByDataLike", (selector) => {
    return cy.get(`[data-test*=${selector}]`);
  });

  Cypress.Commands.add('triggerHover', function(elements) {

      fireEvent(elements, 'mouseover');


    function fireEvent(element, event) {
      if (element.fireEvent) {
        element.fireEvent('on' + event);
      } else {
        const evObj = document.createEvent('Events');

        evObj.initEvent(event, true, false);

        element.dispatchEvent(evObj);
      }
    }

  });