//-
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You under the Apache License, Version 2.0
    (the "License"); you may not use this file except in compliance with
    the License.  You may obtain a copy of the License at

         http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.

include /app/helpers/jade/mixins

mixin discovery-google(modelAt = '$ctrl.clonedCluster')
    -const discoveryKind = 'GoogleStorage'
    -const required = `${modelAt}.discovery.kind == '${discoveryKind}'`
    -const model = `${modelAt}.discovery.GoogleStorage`

    .pc-form-grid-row&attributes(attributes=attributes)
        .pc-form-grid-col-30
            +form-field__text({
                label: 'Project name:',
                model: `${model}.projectName`,
                name: `'${discoveryKind}ProjectName'`,
                required: required,
                placeholder: 'Input project name',
                tip: 'Google Cloud Platforms project name<br/>\
                     Usually this is an auto generated project number(ex. 208709979073) that can be found in "Overview" section of Google Developer Console'
            })
        .pc-form-grid-col-30
            +form-field__text({
                label: 'Bucket name:',
                model: `${model}.bucketName`,
                name: `'${discoveryKind}BucketName'`,
                required: required,
                placeholder: 'Input bucket name',
                tip: 'Google Cloud Storage bucket name<br/>\
                     If the bucket does not exist Ignite will automatically create it<br/>\
                     However the name must be unique across whole Google Cloud Storage and Service Account Id must be authorized to perform this operation'
            })
        .pc-form-grid-col-30
            +form-field__text({
                label: 'Private key path:',
                model: `${model}.serviceAccountP12FilePath`,
                name: `'${discoveryKind}ServiceAccountP12FilePath'`,
                required: required,
                placeholder: 'Input private key path',
                tip: 'Full path to the private key in PKCS12 format of the Service Account'
            })
        .pc-form-grid-col-30
            +form-field__text({
                label: 'Account id:',
                model: `${model}.serviceAccountId`,
                name: `'${discoveryKind}ServiceAccountId'`,
                required: required,
                placeholder: 'Input account id',
                tip: 'Service account ID (typically an e-mail address)'
            })
