/*
 Copyright 2020 TATA ELXSI

 Licensed 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.

 Author: KUMARAN M (kumaran.m@tataelxsi.co.in), RAJESH S (rajesh.s@tataelxsi.co.in), BARATH KUMAR R (barath.r@tataelxsi.co.in)
*/
/**
 * @file K8s Module.
 */
import { CommonModule } from '@angular/common';
import { HttpClientModule } from '@angular/common/http';
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { ReactiveFormsModule } from '@angular/forms';
import { RouterModule, Routes } from '@angular/router';
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
import { NgSelectModule } from '@ng-select/ng-select';
import { TranslateModule } from '@ngx-translate/core';
import { DataService } from 'DataService';
import { K8sActionComponent } from 'K8sActionComponent';
import { K8sAddClusterComponent } from 'K8sAddClusterComponent';
import { K8sAddRepoComponent } from 'K8sAddRepoComponent';
import { K8sAppProfileComponent } from 'K8sAppProfileComponent';
import { K8sAttachProfileComponent } from 'K8sAttachProfileComponent';
import { K8sClusterComponent } from 'K8sClusterComponent';
import { K8sComponent } from 'K8sComponent';
import { K8sInfraConfigAddComponent } from 'K8sInfraConfigAddComponent';
import { K8sInfraConfigProfileComponent } from 'K8sInfraConfigProfileComponent';
import { K8sInfraControllerProfileComponent } from 'K8sInfraControllerProfileComponent';
import { K8sRepositoryComponent } from 'K8sRepositoryComponent';
import { K8sResourceProfileComponent } from 'K8sResourceProfileComponent';
import { KSUAddComponent } from 'KSUAddComponent';
import { KSUComponent } from 'KSUComponent';
import { LoaderModule } from 'LoaderModule';
import { Ng2SmartTableModule } from 'ng2-smart-table';
import { PagePerRowModule } from 'PagePerRowModule';
import { PageReloadModule } from 'PageReloadModule';

/** To halndle project information */
const projectInfo: {} = { title: '{project}', url: '/' };

/**
 * configures  routers
 */
const routes: Routes = [
  {
    path: '',
    component: K8sComponent,
    children: [
      {
        path: 'cluster',
        data: {
          breadcrumb: [{ title: 'PAGE.DASHBOARD.DASHBOARD', url: '/' }, { title: 'PAGE.DASHBOARD.PROJECTS', url: '/projects' },
            projectInfo, { title: 'PAGE.K8S.MENUK8SCLUSTER', url: null }]
        },
        component: K8sClusterComponent
      },
      {
        path: 'infra-config-profile',
        data: {
          breadcrumb: [{ title: 'PAGE.DASHBOARD.DASHBOARD', url: '/' }, { title: 'PAGE.DASHBOARD.PROJECTS', url: '/projects' },
            projectInfo, { title: 'PAGE.K8S.INFRACONFIG', url: null }]
        },
        component: K8sInfraConfigProfileComponent
      },
      {
        path: 'infra-controller-profile',
        data: {
          breadcrumb: [{ title: 'PAGE.DASHBOARD.DASHBOARD', url: '/' }, { title: 'PAGE.DASHBOARD.PROJECTS', url: '/projects' },
            projectInfo, { title: 'PAGE.K8S.INFRACONTROLLER', url: null }]
        },
        component: K8sInfraControllerProfileComponent
      },
      {
        path: 'app-profile',
        data: {
          breadcrumb: [{ title: 'PAGE.DASHBOARD.DASHBOARD', url: '/' }, { title: 'PAGE.DASHBOARD.PROJECTS', url: '/projects' },
            projectInfo, { title: 'PAGE.K8S.APP', url: null }]
        },
        component: K8sAppProfileComponent
      },
      {
        path: 'resource-profile',
        data: {
          breadcrumb: [{ title: 'PAGE.DASHBOARD.DASHBOARD', url: '/' }, { title: 'PAGE.DASHBOARD.PROJECTS', url: '/projects' },
            projectInfo, { title: 'PAGE.K8S.RESOURCE', url: null }]
        },
        component: K8sResourceProfileComponent
      },
      {
        path: 'ksu',
        data: {
          breadcrumb: [{ title: 'PAGE.DASHBOARD.DASHBOARD', url: '/' }, { title: 'PAGE.DASHBOARD.PROJECTS', url: '/projects' },
            projectInfo, { title: 'PAGE.K8S.KSU', url: null }]
        },
        component: KSUComponent
      },
      {
        path: 'repo',
        data: {
          breadcrumb: [{ title: 'PAGE.DASHBOARD.DASHBOARD', url: '/' }, { title: 'PAGE.DASHBOARD.PROJECTS', url: '/projects' },
            projectInfo, { title: 'PAGE.K8S.MENUK8SREPO', url: null }]
        },
        component: K8sRepositoryComponent
      }
    ]
  }
];
/**
 * Creating @NgModule component for Modules
 */
@NgModule({
  imports: [
    ReactiveFormsModule.withConfig({ warnOnNgModelWithFormControl: 'never' }),
    FormsModule,
    CommonModule,
    HttpClientModule,
    NgSelectModule,
    Ng2SmartTableModule,
    TranslateModule,
    RouterModule.forChild(routes),
    NgbModule,
    PagePerRowModule,
    LoaderModule,
    PageReloadModule
  ],
  declarations: [
    K8sComponent,
    K8sClusterComponent,
    K8sRepositoryComponent,
    K8sActionComponent,
    K8sAddClusterComponent,
    K8sAddRepoComponent,
    K8sAttachProfileComponent,
    K8sInfraConfigProfileComponent,
    K8sInfraControllerProfileComponent,
    K8sInfraConfigAddComponent,
    K8sAppProfileComponent,
    K8sResourceProfileComponent,
    KSUComponent,
    KSUAddComponent
  ],
  providers: [DataService],
  schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
/** Exporting a class @exports K8sModule */
export class K8sModule {
  /** Variables declared to avoid state-less class */
  private k8sModule: string;
}
