// ***********************************************
// 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) => { ... })


Cypress.Commands.add('stubAuthenticate', (attrs = {}) => {
  const defaultAttrs = {
    id: '1',
    first_name: 'Peter',
    last_name: 'Pan',
    name: 'Peter Pan',
    email: 'peter@example.com',
    photo_url: ''
  }
  const currentUserAtrs = {...defaultAttrs, ...attrs}
  cy.intercept('GET', `${Cypress.env('apiBaseUrl')}/me`, {
    statusCode: 200,
    body: currentUserAtrs
  }).as('getCurrentUser')
  
});

Cypress.Commands.add('stubUnauthenticate', () => {
  cy.intercept('GET', `${Cypress.env('apiBaseUrl')}/me`, {
    statusCode: 401,
    body: {}
  }).as('getUnauthenticateCurrentUser')
});


Cypress.Commands.add('stubGonSubscriptionCodes', () => {
  Cypress.on('window:before:load', win => {
    win.gon = { 
      //session variables
      global: {
        subscription_codes: [
          {
            id: null,
            name: 'Free',
            price: 0,
            cycle: 'month'
          },
          {
            id: 'jamsubsilver',
            name: 'Silver',
            price: 4.99,
            cycle: 'month'
          },
          {
            id: 'jamsubgold',
            name: 'Gold',
            price: 9.99,
            cycle: 'month'
          },
          {
            id: 'jamsubplatinum',
            name: 'Platinum',
            price: 19.99,
            cycle: 'month'
          },
          {
            id: 'jamsubsilveryearly',
            name: 'Silver',
            price: 49.99,
            cycle: 'year'
          },
          {
            id: 'jamsubgoldyearly',
            name: 'Gold',
            price: 99.99,
            cycle: 'year'
          },
          {
            id: 'jamsubplatinumyearly',
            name: 'Platinum',
            price: 199.99,
            cycle: 'year'
          },
        ]
      }
    }
  });
});
