import { AUTH_TOKEN } from 'cypress/support/commands';
import { bahnCard50Business, italo, sncf, trenItalia, ukRailNetworkCard } from './index';
const newUserCreds = Cypress.env('newUser').NEW_USER_PASSWORD;

function loginAndRetrieveData(): Cypress.Chainable<string> {
  cy.clearLocalStorage();
  cy.clearCookies();
  return cy.task<string>('getDataFromCache', 'userEmail').then((email: string) => {
    return cy.loginWithAuthToken({ email: email, password: newUserCreds, isSA: true });
  });
}

Cypress.Commands.add('createTrainCard', (cardData: any) => {
  return cy.request({
    method: 'POST',
    url: `api/trip/train/v1/trainCards`,
    headers: {
      Authorization: AUTH_TOKEN,
      Accept: 'application/json'
    },
    body: cardData,
    retryOnStatusCodeFailure: true
  });
});

Cypress.Commands.add('getUserLoyaltyProgramMemberships', () => {
  loginAndRetrieveData().then(() => {
    cy.task('getDataFromCache', 'userResponse').then(({ uuid, email }: any) => {
      cy.log('user: ' + email);
      cy.log('uuid: ' + uuid);

      cy.createTrainCard({ trainCardTypeId: ukRailNetworkCard })
        .then((response) => {
          cy.log('Train Card UkRail NetworkCard Response Status: ' + response.status);
          return cy.createTrainCard(bahnCard50Business);
        })
        .then((response) => {
          cy.log(`Train Card Deutsche bahn Response Status: ` + response.status);
          return cy.createTrainCard(trenItalia);
        })
        .then((response) => {
          cy.log('Train Card TrenItalia Response Status: ' + response.status);
          return cy.createTrainCard(italo);
        })
        .then((response) => {
          cy.log('Train Card Italo Response Status: ' + response.status);
          return cy.createTrainCard(sncf);
        })
        .then((response) => {
          cy.log('Train Card SNCF Response Status: ' + response.status);
        });
    });
  });
});
