/********************************************************************************
 * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
 *
 * See the NOTICE file(s) distributed with this work for additional
 * information regarding copyright ownership.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 ********************************************************************************/

import { Component, OnInit } from '@angular/core';
import {DialogModule} from 'primeng/primeng';
import { TranslateService } from '@ngx-translate/core';

import {SelectItem} from 'primeng/api';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html'
})
export class AppComponent implements OnInit {

  readonly TtlLogout = 'Logout';
  readonly TtlAbout = 'About';
  readonly TtlLanguage = 'Language';

  languages = <SelectItem[]> [
    { label: 'English', value: 'en' },
    { label: 'Deutsch', value: 'de' },
  ];

  selectedLanguage = 'en';

  links = [
      { name: 'Administration', path: '/administration' }
  ];
  displayAboutDialog = false;

  constructor(private translate: TranslateService) {

  }

  ngOnInit() {
    this.translate.langs = this.languages.map(i => i.value);
    let browserLang = this.translate.getBrowserLang();
    if (this.translate.langs.findIndex(l => l === browserLang) > -1) {
      this.selectedLanguage = browserLang;
    }
    this.translate.setDefaultLang(this.selectedLanguage);
    this.translate.use(this.selectedLanguage);
  }

  selectLanguage($event: any) {
    this.translate.use(this.selectedLanguage);
  }

  showAboutDialog() {
    this.displayAboutDialog = true;
  }
}
