import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { CompositeRouteGuard, IqserPermissionsGuard, IqserRoutes } from '@iqser/common-ui';
import { RedRoleGuard } from '@users/red-role.guard';
import { BaseAccountScreenComponent } from './base-account-screen/base-account-screen-component';
import { PreferencesComponent } from './screens/preferences/preferences.component';
import { Roles } from '@users/roles';
import { IqserAuthGuard } from '@iqser/common-ui/lib/users';

const routes: IqserRoutes = [
    { path: '', redirectTo: 'user-profile', pathMatch: 'full' },
    {
        path: 'user-profile',
        component: BaseAccountScreenComponent,
        canActivate: [CompositeRouteGuard],
        data: {
            routeGuards: [IqserAuthGuard, RedRoleGuard],
        },
        loadChildren: () => import('./screens/user-profile/user-profile.module').then(m => m.UserProfileModule),
    },
    {
        path: 'notifications',
        component: BaseAccountScreenComponent,
        canActivate: [CompositeRouteGuard, IqserPermissionsGuard],
        data: {
            routeGuards: [IqserAuthGuard, RedRoleGuard],
            permissions: {
                allow: [Roles.notifications.write, 'RED_USER'],
                redirectTo: '/',
            },
        },
        loadChildren: () => import('./screens/notifications/notifications.module').then(m => m.NotificationsModule),
    },
    {
        path: 'preferences',
        component: BaseAccountScreenComponent,
        canActivate: [CompositeRouteGuard],
        data: {
            routeGuards: [IqserAuthGuard, RedRoleGuard],
            screen: 'preferences',
        },
        children: [
            {
                path: '',
                component: PreferencesComponent,
            },
        ],
    },
    {
        path: 'warnings-preferences',
        component: BaseAccountScreenComponent,
        canActivate: [CompositeRouteGuard],
        data: {
            routeGuards: [IqserAuthGuard, RedRoleGuard],
            screen: 'warnings-preferences',
        },
        children: [
            {
                path: '',
                component: PreferencesComponent,
            },
        ],
    },
];

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