/**
 * 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.
 */

App.Authentication = DS.Model.extend({
  method:DS.attr('boolean'), // use LDAP
  primaryServer:DS.attr('string'),
  secondaryServer:DS.attr('string'),
  useSsl:DS.attr('boolean'),
  bindMethod:DS.attr('boolean'), // use credentials
  bindUser:DS.attr('string'),
  password:DS.attr('string'),
  passwordRetype:DS.attr('string'),
  searchBaseDn:DS.attr('string'),
  usernameAttribute:DS.attr('string')
});

App.Authentication.FIXTURES = [
  {
    id:1,
    method:0,
    primary_server:"",
    secondary_server:"",
    use_ssl:false,
    bind_method:0,
    bind_user:"",
    password:"",
    password_retype:"",
    search_base_dn:"",
    username_attribute:""
  }
];

App.AuthenticationForm = App.Form.extend({
  testResult:false,
  fieldsOptions:[
    { name:"method", displayName:"", isRequired:false, displayType:"select",
      values:[
        {value:0, label:Em.I18n.t("admin.authentication.form.method.database")},
        {value:1, label:Em.I18n.t("admin.authentication.form.method.ldap")}
      ]
    },
    { name:"primaryServer", displayName:Em.I18n.t("admin.authentication.form.primaryServer"), /*validator:'ipaddress',*/
      isRequired:function () {
        return this.get('form.field.method.value');
      }.property('form.field.method.value')
    },
    { name:"secondaryServer", displayName:Em.I18n.t("admin.authentication.form.secondaryServer"), /*validator:'ipaddress',*/ isRequired:false},
    { name:"useSsl", displayName:Em.I18n.t("admin.authentication.form.useSsl"), displayType:"checkbox", isRequired:false },
    { name:"bindMethod", displayName:'', displayType:"select", isRequired:false,
      values:[
        {value:0, label:Em.I18n.t("admin.authentication.form.bind.anonymously")},
        {value:1, label:Em.I18n.t("admin.authentication.form.bind.useCrenedtials")}
      ]},
    { name:"bindUser", displayName:Em.I18n.t('admin.authentication.form.bindUserDN'), isRequired:function () {
      return this.get('form.field.bindMethod.value');
    }.property('form.field.bindMethod.value')},
    { name:"password", displayName:Em.I18n.t('common.password'), displayType:"password",
      isRequired:function () {
        return this.get('form.field.bindMethod.value');
      }.property('form.field.bindMethod.value') },
    { name:"passwordRetype", displayName:Em.I18n.t('form.passwordRetype'), displayType:"password",
      validator: "passwordRetype",
      isRequired:function () {
        return this.get('form.field.bindMethod.value');
      }.property('form.field.bindMethod.value')},
    { name:"searchBaseDn", displayName:Em.I18n.t('admin.authentication.form.searchBaseDN'),
      isRequired:function () {
        return this.get('form.field.method.value');
      }.property('form.field.method.value')
    },
    { name:"usernameAttribute", displayName:Em.I18n.t('admin.authentication.form.usernameAttribute'),
      isRequired:function () {
        return this.get('form.field.method.value');
      }.property('form.field.method.value')
    },

    { name:"userDN", displayName:Em.I18n.t('admin.authentication.form.userDN') },
    { name:"userPassword", displayName:Em.I18n.t('common.password'), displayType:'password'}
  ],
  fields:[],
  testConfiguration:function () {
    console.warn('Configuration test is randomized');
    this.set('testResult', parseInt(Math.random() * 2));
    return true;
  },
  testConfigurationMessage:function () {
    return this.get('testResult') ? Em.I18n.t('admin.authentication.form.test.success') : Em.I18n.t('admin.authentication.form.test.fail');
  }.property('testResult'),
  testConfigurationClass:function () {
    return this.get('testResult') ? "text-success" : "text-error";
  }.property('testConfigurationMessage')
})
;