import { clickable, collection, fillable, text, selectable, isPresent } from 'ember-cli-page-object';

import fields from './form-field';

export default {
  ...fields,
  scope: '.config-pki-ca',
  text: text('[data-test-text]'),
  title: text('[data-test-title]'),

  hasTitle: isPresent('[data-test-title]'),
  hasError: isPresent('[data-test-error]'),
  hasSignIntermediateForm: isPresent('[data-test-sign-intermediate-form]'),

  replaceCA: clickable('[data-test-go-replace-ca]'),
  replaceCAText: text('[data-test-go-replace-ca]'),
  setSignedIntermediateBtn: clickable('[data-test-go-set-signed-intermediate]'),
  signIntermediateBtn: clickable('[data-test-go-sign-intermediate]'),
  caType: selectable('[data-test-input="caType"]'),
  submit: clickable('[data-test-submit]'),
  back: clickable('[data-test-back-button]'),

  signedIntermediate: fillable('[data-test-signed-intermediate]'),
  downloadLinks: collection({ itemScope: '[data-test-ca-download-link]' }),
  rows: collection({
    itemScope: '[data-test-table-row]',
  }),
  rowValues: collection({
    itemScope: '[data-test-row-value]',
  }),
  csr: text('[data-test-row-value="CSR"]', { normalize: false }),
  csrField: fillable('[data-test-input="csr"]'),
  certificate: text('[data-test-row-value="Certificate"]', { normalize: false }),
  certificateIsPresent: isPresent('[data-test-row-value="Certificate"]'),
  uploadCert: clickable('[data-test-input="uploadPemBundle"]'),
  enterCertAsText: clickable('[data-test-text-toggle]'),
  pemBundle: fillable('[data-test-text-file-textarea="true"]'),
  commonName: fillable('[data-test-input="commonName"]'),

  generateCA(commonName = 'PKI CA', type = 'root') {
    if (type === 'intermediate') {
      return this.replaceCA().commonName(commonName).caType('intermediate').submit();
    }
    return this.replaceCA().commonName(commonName).submit();
  },

  uploadCA(pem) {
    return this.replaceCA().uploadCert().enterCertAsText().pemBundle(pem).submit();
  },

  signIntermediate(commonName) {
    return this.signIntermediateBtn().commonName(commonName);
  },
};
