//-
    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-jdbc(modelAt = '$ctrl.clonedCluster')
    -const model = `${modelAt}.discovery.Jdbc`
    -const required = `${modelAt}.discovery.kind === "Jdbc"`

    .pc-form-grid-row&attributes(attributes=attributes)
        .pc-form-grid-col-30
            +form-field__text({
                label: 'Data source bean name:',
                model: `${model}.dataSourceBean`,
                name: '"dataSourceBean"',
                required: required,
                placeholder:'Input bean name',
                tip: 'Name of the data source bean in Spring context'
            })
        .pc-form-grid-col-30
            +form-field__dialect({
                label: 'Dialect:',
                model: `${model}.dialect`,
                name: '"dialect"',
                required,
                tip: 'Dialect of SQL implemented by a particular RDBMS:',
                genericDialectName: 'Generic JDBC dialect',
                placeholder: 'Choose JDBC dialect'
            })
        .pc-form-grid-col-60
            +form-field__checkbox({
                label: 'DB schema should be initialized by Ignite',
                model: `${model}.initSchema`,
                name: '"initSchema"',
                tip: 'Flag indicating whether DB schema should be initialized by Ignite or was explicitly created by user'
            })
        .pc-form-grid-col-30(ng-if=`$ctrl.Clusters.requiresProprietaryDrivers(${modelAt}.discovery.Jdbc)`)
            a.link-success(ng-href=`{{ $ctrl.Clusters.jdbcDriverURL(${modelAt}.discovery.Jdbc) }}` target='_blank')
                | Download JDBC drivers?