<page-header title="'Create Custom template'" breadcrumbs="[{label:'Custom Templates', link:'docker.templates.custom'}, 'Create Custom template']"> </page-header>

<div class="row" ng-if="!$ctrl.state.loading">
  <div class="col-sm-12">
    <rd-widget>
      <rd-widget-body>
        <form class="form-horizontal" name="customTemplateForm">
          <custom-template-common-fields
            form-values="$ctrl.formValues"
            show-platform-field="true"
            show-type-field="true"
            name-regex="$ctrl.state.templateNameRegex"
          ></custom-template-common-fields>

          <!-- build-method -->
          <div ng-if="!$ctrl.state.fromStack">
            <div class="col-sm-12 form-section-title"> Build method </div>
            <div class="form-group">
              <div class="col-sm-12">
                <div class="boxselector_wrapper">
                  <div>
                    <input type="radio" id="method_editor" ng-model="$ctrl.state.Method" value="editor" ng-change="$ctrl.onChangeMethod()" />
                    <label for="method_editor">
                      <div class="boxselector_header">
                        <pr-icon icon="'edit'" feather="true"></pr-icon>
                        Web editor
                      </div>
                      <p>Use our Web editor</p>
                    </label>
                  </div>
                  <div>
                    <input type="radio" id="method_upload" ng-model="$ctrl.state.Method" value="upload" ng-change="$ctrl.onChangeMethod()" />
                    <label for="method_upload">
                      <div class="boxselector_header">
                        <pr-icon icon="'upload'" feather="true"></pr-icon>
                        Upload
                      </div>
                      <p>Upload from your computer</p>
                    </label>
                  </div>
                  <div>
                    <input type="radio" id="method_repository" ng-model="$ctrl.state.Method" value="repository" ng-change="$ctrl.onChangeMethod()" />
                    <label for="method_repository">
                      <div class="boxselector_header">
                        <pr-icon icon="'git-pull-request'" feather="true"></pr-icon>
                        Repository
                      </div>
                      <p>Use a git repository</p>
                    </label>
                  </div>
                </div>
              </div>
            </div>
          </div>
          <!-- !build-method -->
          <!-- web-editor -->
          <web-editor-form
            ng-if="$ctrl.state.Method === 'editor'"
            identifier="custom-template-creation-editor"
            value="$ctrl.formValues.FileContent"
            on-change="($ctrl.editorUpdate)"
            ng-required="true"
            yml="true"
            placeholder="# Define or paste the content of your docker compose file here"
          >
            <editor-description>
              <span class="col-sm-12 text-muted">
                You can get more information about Compose file format in the
                <a href="https://docs.docker.com/compose/compose-file/" target="_blank"> official documentation </a>
                .
              </span>
            </editor-description>
          </web-editor-form>
          <!-- !web-editor -->
          <!-- upload -->
          <div ng-show="$ctrl.state.Method === 'upload'">
            <div class="col-sm-12 form-section-title"> Upload </div>
            <div class="form-group">
              <span class="col-sm-12 text-muted small"> You can upload a Compose file from your computer. </span>
            </div>
            <div class="form-group">
              <div class="col-sm-12">
                <button type="button" class="btn btn-sm btn-primary" ngf-select ng-model="$ctrl.formValues.File"> Select file </button>
                <span class="space-left">
                  {{ $ctrl.formValues.File.name }}
                  <span ng-if="$ctrl.formValues.File">
                    <pr-icon icon="'x'" feather="true" mode="'danger'"></pr-icon>
                  </span>
                </span>
              </div>
            </div>
          </div>
          <!-- !upload -->
          <!-- repository -->
          <git-form ng-if="$ctrl.state.Method === 'repository'" model="$ctrl.formValues" on-change="($ctrl.handleChange)"></git-form>

          <div class="form-group" ng-if="!$ctrl.state.isTemplateValid">
            <div class="col-sm-12">
              <div class="small text-warning">
                <pr-icon icon="'alert-triangle'" feather="true" class-name="space-right"></pr-icon>
                Template is invalid.
              </div>
            </div>
          </div>

          <custom-templates-variables-definition-field
            ng-if="$ctrl.isTemplateVariablesEnabled"
            value="$ctrl.formValues.Variables"
            on-change="($ctrl.onVariablesChange)"
            is-variables-names-from-parent="$ctrl.state.Method === 'editor'"
          ></custom-templates-variables-definition-field>

          <!-- !repository -->
          <por-access-control-form form-data="$ctrl.formValues.AccessControlData"></por-access-control-form>

          <!-- actions -->
          <div class="col-sm-12 form-section-title"> Actions </div>
          <div class="form-group">
            <div class="col-sm-12">
              <button
                type="button"
                class="btn btn-primary btn-sm !ml-0"
                ng-disabled="$ctrl.state.actionInProgress || customTemplateForm.$invalid
              || ($ctrl.state.Method === 'editor' && !$ctrl.formValues.FileContent)
              || ($ctrl.state.Method === 'upload' && !$ctrl.formValues.File)
              || ($ctrl.state.Method === 'repository' && ((!$ctrl.formValues.RepositoryURL || !$ctrl.formValues.ComposeFilePathInRepository) || ($ctrl.formValues.RepositoryAuthentication && (!$ctrl.formValues.RepositoryUsername || !$ctrl.formValues.RepositoryPassword))))
              || !$ctrl.formValues.Title
              || !$ctrl.state.isTemplateValid"
                ng-click="$ctrl.createCustomTemplate()"
                button-spinner="$ctrl.state.actionInProgress"
              >
                <span ng-hide="$ctrl.state.actionInProgress">Create custom template</span>
                <span ng-show="$ctrl.state.actionInProgress">Creation in progress...</span>
              </button>
              <span class="text-danger space-left" ng-if="$ctrl.state.formValidationError">
                {{ $ctrl.state.formValidationError }}
              </span>
            </div>
          </div>
          <!-- !actions -->
        </form>
      </rd-widget-body>
    </rd-widget>
  </div>
</div>
