import {NgModule} from '@angular/core';
import {NavigationStart, Router, RouterModule, Routes} from '@angular/router';
import {filter} from 'rxjs/operators';
import {UserService} from './services/user/user.service';

import {AIndexComponent} from './pages/a-index/a-index.component';
import {ArticleManagerComponent} from './pages/article-manager/article-manager.component';
import {CommentManagerComponent} from './pages/comment-manager/comment-manager.component';
import {TagManagerComponent} from './pages/tag-manager/tag-manager.component';
import {UserInfoComponent} from './pages/user-info/user-info.component';
import {CategoryManagerComponent} from './pages/category-manager/category-manager.component';
import {LinksManagerComponent} from './pages/links-manager/links.component';
import {VisitorManagerComponent} from './pages/visitor-manager/visitor-manager.component';
import {UpdateManagerComponent} from './pages/update-manager/update.component';
import {UserManagerComponent} from './pages/user-manager/user-manager.component';


const routes: Routes = [
    {path: '', component: AIndexComponent},
    {path: 'articles', component: ArticleManagerComponent},
    {path: 'comments', component: CommentManagerComponent},
    {path: 'tags', component: TagManagerComponent},
    {path: 'userInfo', component: UserInfoComponent},
    {path: 'categories', component: CategoryManagerComponent},
    {path: 'links', component: LinksManagerComponent},
    {path: 'visitors', component: VisitorManagerComponent},
    {path: 'update', component: UpdateManagerComponent},
    {path: 'users', component: UserManagerComponent},
    {path: '**', component: AIndexComponent}
];

@NgModule({
    imports: [RouterModule.forRoot(routes)],
    exports: [RouterModule]
})
export class AppRoutingModule {

    // todo ： 换用路由守卫
    constructor(private router: Router, private userService: UserService) {
        this.router.events.pipe(filter((event) => event instanceof NavigationStart)
        ).subscribe((event: NavigationStart) => {
            if (!this.userService.userInfo) {
                this.userService.getUserInfo().subscribe(data => {
                    if (data.code === 0) {
                        this.userService.userInfo = data.result;
                        this.checkPermission(event);
                    } else if (data.code === 301) {
                        window.location.href = '/login';
                    } else {
                        window.location.href = '/';
                    }
                });
            } else {
                this.checkPermission(event);
            }
        });
    }

    private checkPermission(event) {
        if (this.userService.userInfo.role === 'user') {
            switch (event.url) {
                case '/':
                case '/comments':
                case '/userInfo':
                    break;
                default :
                    this.router.navigateByUrl('/');
            }
        }
    }
}
