/*
 * Copyright 2018-present Open Networking Foundation
 *
 * 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.
 */
import {NgModule} from '@angular/core';
import {Route, RouterModule} from '@angular/router';

/**
 * The set of Routes in the application - can be chosen from nav menu or
 * elsewhere like tabular icon for flows etc
 */
const onosRoutes: Route[] = [
    <Route>{
        path: 'app',
        pathMatch: 'full',
        loadChildren: () => import('./view/apps/apps.module').then(m => m.AppsModule)
    },
    <Route>{
        path: 'processor',
        pathMatch: 'full',
        loadChildren: () => import('./view/processor/processor.module').then(m => m.ProcessorModule)
    },
    <Route>{
        path: 'settings',
        pathMatch: 'full',
        loadChildren: () => import('./view/settings/settings.module').then(m => m.SettingsModule)
    },
    <Route>{
        path: 'partition',
        pathMatch: 'full',
        loadChildren: () => import('./view/partition/partition.module').then(m => m.PartitionModule)
    },
    <Route>{
        path: 'cluster',
        pathMatch: 'full',
        loadChildren: () => import('./view/cluster/cluster.module').then(m => m.ClusterModule)
    },
    <Route>{
        path: 'device',
        pathMatch: 'full',
        loadChildren: () => import('./view/device/device.module').then(m => m.DeviceModule)
    },
    <Route>{
        path: 'link',
        pathMatch: 'full',
        loadChildren: () => import('./view/link/link.module').then(m => m.LinkModule)
    },
    <Route>{
        path: 'host',
        pathMatch: 'full',
        loadChildren: () => import('./view/host/host.module').then(m => m.HostModule)
    },
    <Route>{
        path: 'intent',
        pathMatch: 'full',
        loadChildren: () => import('./view/intent/intent.module').then(m => m.IntentModule)
    },
    <Route>{
        path: 'tunnel',
        pathMatch: 'full',
        loadChildren: () => import('./view/tunnel/tunnel.module').then(m => m.TunnelModule)
    },
    <Route>{
        path: 'flow',
        pathMatch: 'full',
        loadChildren: () => import('./view/flow/flow.module').then(m => m.FlowModule)
    },
    <Route>{
        path: 'port',
        pathMatch: 'full',
        loadChildren: () => import('./view/port/port.module').then(m => m.PortModule)
    },
    <Route>{
        path: 'group',
        pathMatch: 'full',
        loadChildren: () => import('./view/group/group.module').then(m => m.GroupModule)
    },
    <Route>{
        path: 'meter',
        pathMatch: 'full',
        loadChildren: () => import('./view/meter/meter.module').then(m => m.MeterModule)
    },
    <Route>{
        path: 'pipeconf',
        pathMatch: 'full',
        loadChildren: () => import('./view/pipeconf/pipeconf.module').then(m => m.PipeconfModule)
    },
    <Route>{
        path: 'topo2',
        pathMatch: 'full',
        loadChildren: () => import('../../../../../gui2-topo-lib/lib/gui2-topo-lib.module').then(m => m.Gui2TopoLibModule)
    },
    <Route>{
        path: 'alarmTable',
        pathMatch: 'full',
        loadChildren: () => import('../../../../../../apps/faultmanagement/fm-gui2-lib/lib/fm-gui2-lib.module').then(m => m.FmGui2LibModule)
    },
    <Route>{
        path: 'roadm-gui',
        pathMatch: 'full',
        loadChildren: () => import('../../../../../../apps/roadm/web/roadm-gui/lib/roadm-gui-lib.module').then(m => m.RoadmGuiLibModule)
    },
    <Route>{
        path: 'yangModel',
        pathMatch: 'full',
        loadChildren: () => import('../../../../../../apps/yang-gui/yang-gui2-lib/lib/yang-gui2-lib.module').then(m => m.YangGui2LibModule)
    },
    <Route>{
        path: '',
        redirectTo: 'topo2', // Default to Topology view
        pathMatch: 'full'
    }
];

/**
 * ONOS GUI -- Main Routing Module - allows modules to be lazy loaded
 *
 * See https://angular.io/guide/lazy-loading-ngmodules
 * for the theory of operation
 */
@NgModule({
    imports: [
        RouterModule.forRoot(onosRoutes, {useHash: true})
    ],
    exports: [RouterModule],
    providers: []
})
export class OnosRoutingModule {
}
