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

import { ModuleWithProviders } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';

import { LoginComponent } from './login/login.module';
import { LayoutComponent } from './layout/layout.component';
import { ResourcesComponent } from './resources/resources.component';
import { AccessNotebookGuideComponent, PublicKeyGuideComponent } from './help';
import { NotFoundComponent } from './service-pages/not-found/not-found.component';
import { AccessDeniedComponent } from './service-pages/access-denied/access-denied.component';
import { WebterminalComponent } from './webterminal/webterminal.component';
import { ManagementComponent } from './administration/management';
import { ProjectComponent } from './administration/project/project.component';
import { RolesComponent } from './administration/roles/roles.component';
import { SwaggerComponent } from './swagger';
import { AuthorizationGuard, CheckParamsGuard, CloudProviderGuard, AdminGuard, AuditGuard } from './core/services';
import {ConfigurationComponent} from './administration/configuration/configuration.component';
import {ProjectAdminGuard} from './core/services/projectAdmin.guard';
import {ReportingComponent} from './reports/reporting/reporting.component';
import {OdahuComponent} from './administration/odahu/odahu.component';
import {AuditComponent} from './reports/audit/audit.component';

const routes: Routes = [
  {
    path: 'login',
    component: LoginComponent
  }, 
  {
    path: '',
    canActivate: [CheckParamsGuard],
    component: LayoutComponent,
    children: [
      {
        path: '',
        redirectTo: 'resources_list',
        pathMatch: 'full'
      }, 
      {
        path: 'resources_list',
        component: ResourcesComponent,
        canActivate: [AuthorizationGuard]
      }, 
      {
        path: 'billing_report',
        component: ReportingComponent,
        canActivate: [AuthorizationGuard, CloudProviderGuard]
      }, 
      {
        path: 'projects',
        component: ProjectComponent,
        canActivate: [AuthorizationGuard, AdminGuard],
      },
      {
      //   path: 'odahu',
      //   component: OdahuComponent,
      //   canActivate: [AuthorizationGuard, AdminGuard],
      // }, {
        path: 'roles',
        component: RolesComponent,
        canActivate: [AuthorizationGuard, AdminGuard],
      }, 
      {
        path: 'environment_management',
        component: ManagementComponent,
        canActivate: [AuthorizationGuard, AdminGuard]
      }, 
      {
        path: 'configuration',
        component: ConfigurationComponent,
        canActivate: [AuthorizationGuard, AdminGuard, ProjectAdminGuard]
      },
      {
        path: 'swagger',
        component: SwaggerComponent,
        canActivate: [AuthorizationGuard]
      }, 
      {
        path: 'help/publickeyguide',
        component: PublicKeyGuideComponent,
        canActivate: [AuthorizationGuard]
      }, 
      {
        path: 'help/accessnotebookguide',
        component: AccessNotebookGuideComponent,
        canActivate: [AuthorizationGuard]
      },
      {
        path: 'audit',
        component: AuditComponent,
        canActivate: [AuthorizationGuard, AuditGuard],
      },
    ]
  }, 
  {
    path: 'terminal/:id/:endpoint',
    component: WebterminalComponent
  }, 
  {
    path: '403',
    component: AccessDeniedComponent,
    canActivate: [AuthorizationGuard]
  }, 
  {
  path: '**',
  component: NotFoundComponent
  }
];

export const AppRoutingModule: ModuleWithProviders<RouterModule> = RouterModule.forRoot(routes, { useHash: true });
