const groupTravelSettingsSelectors = {
  eventApprovalMainToggle: '[data-testid="toggleGroupTravelWorkflow"]',
  eventApprovalMainInput: '[data-testid="toggleGroupTravelWorkflow"] input',
  eventApprovalManagerToggle: '[data-testid="toggleGroupTravelApprovalManagers"]',
  eventApprovalManagerInput: '[data-testid="toggleGroupTravelApprovalManagers"] input',
  eventApprovalDelegateToggle: '[data-testid="toggleGroupTravelApprovalDelegates"]',
  eventApprovalDelegateInput: '[data-testid="toggleGroupTravelApprovalDelegates"] input'
};

export class GroupTravelSettings {
  static visitOverviewPage(): void {
    cy.visit('app/admin2/settings/overview');
  }

  static selectToggle(value: string, inputSelector: string, toggleSelector: string) {
    cy.allure().logStep('select a toggle for event approval flow');
    cy.get(inputSelector).then(($ele) => {
      if ($ele.attr('aria-checked') == value) {
        cy.get(toggleSelector).click();
      }
    });
  }

  static selectEventApprovalFlow(
    toggle:
      | 'approval is not required'
      | 'not required for managers'
      | 'not required for delegates'
      | 'not required for managers and delegates'
  ) {
    switch (toggle) {
      case 'approval is not required':
        this.selectToggle(
          'true',
          groupTravelSettingsSelectors.eventApprovalMainInput,
          groupTravelSettingsSelectors.eventApprovalMainToggle
        );
        break;

      case 'not required for managers':
        this.selectToggle(
          'false',
          groupTravelSettingsSelectors.eventApprovalMainInput,
          groupTravelSettingsSelectors.eventApprovalMainToggle
        );
        this.selectToggle(
          'false',
          groupTravelSettingsSelectors.eventApprovalManagerInput,
          groupTravelSettingsSelectors.eventApprovalManagerToggle
        );
        this.selectToggle(
          'true',
          groupTravelSettingsSelectors.eventApprovalDelegateInput,
          groupTravelSettingsSelectors.eventApprovalDelegateToggle
        );
        break;

      case 'not required for delegates':
        this.selectToggle(
          'false',
          groupTravelSettingsSelectors.eventApprovalMainInput,
          groupTravelSettingsSelectors.eventApprovalMainToggle
        );
        this.selectToggle(
          'true',
          groupTravelSettingsSelectors.eventApprovalManagerInput,
          groupTravelSettingsSelectors.eventApprovalManagerToggle
        );
        this.selectToggle(
          'false',
          groupTravelSettingsSelectors.eventApprovalDelegateInput,
          groupTravelSettingsSelectors.eventApprovalDelegateToggle
        );
        break;

      case 'not required for managers and delegates':
        this.selectToggle(
          'false',
          groupTravelSettingsSelectors.eventApprovalMainInput,
          groupTravelSettingsSelectors.eventApprovalMainToggle
        );
        this.selectToggle(
          'false',
          groupTravelSettingsSelectors.eventApprovalManagerInput,
          groupTravelSettingsSelectors.eventApprovalManagerToggle
        );
        this.selectToggle(
          'false',
          groupTravelSettingsSelectors.eventApprovalDelegateInput,
          groupTravelSettingsSelectors.eventApprovalDelegateToggle
        );
        break;

      default:
        break;
    }
  }
}
