import { Route } from '@angular/router';
import { AuthGuard } from 'app/core/auth/guards/auth.guard';
import { NoAuthGuard } from 'app/core/auth/guards/noAuth.guard';
import { LayoutComponent } from 'app/layout/layout.component';
import { InitialDataResolver } from 'app/app.resolvers';

// @formatter:off
/* eslint-disable max-len */
/* eslint-disable @typescript-eslint/explicit-function-return-type */
export const appRoutes: Route[] = [
  // Redirect empty path to '/dashboards/user'
  { path: '', pathMatch: 'full', redirectTo: 'dashboards/user' },

  // Redirect signed in user to the '/dashboards/user'
  //
  // After the user signs in, the sign in page will redirect the user to the 'signed-in-redirect'
  // path. Below is another redirection for that path to redirect the user to the desired
  // location. This is a small convenience to keep all main routes together here on this file.
  {
    path: 'signed-in-redirect',
    pathMatch: 'full',
    redirectTo: 'dashboards/user',
  },

  // Auth routes for guests
  {
    path: '',
    canActivate: [NoAuthGuard],
    canActivateChild: [NoAuthGuard],
    component: LayoutComponent,
    data: {
      layout: 'empty',
    },
    children: [
      {
        path: 'confirmation-required',
        loadChildren: () =>
          import(
            'app/modules/auth/confirmation-required/confirmation-required.module'
          ).then((m: any) => m.AuthConfirmationRequiredModule),
      },
      {
        path: 'forgot-password',
        loadChildren: () =>
          import(
            'app/modules/auth/forgot-password/forgot-password.module'
          ).then((m: any) => m.AuthForgotPasswordModule),
      },
      {
        path: 'reset-password',
        loadChildren: () =>
          import('app/modules/auth/reset-password/reset-password.module').then(
            (m: any) => m.AuthResetPasswordModule
          ),
      },
      {
        path: 'sign-in',
        loadChildren: () =>
          import('app/modules/auth/sign-in/sign-in.module').then(
            (m: any) => m.AuthSignInModule
          ),
      },
      {
        path: 'sign-up',
        loadChildren: () =>
          import('app/modules/auth/sign-up/sign-up.module').then(
            (m: any) => m.AuthSignUpModule
          ),
      },
    ],
  },

  // Auth routes for authenticated users
  {
    path: '',
    canActivate: [AuthGuard],
    canActivateChild: [AuthGuard],
    component: LayoutComponent,
    data: {
      layout: 'empty',
    },
    children: [
      {
        path: 'sign-out',
        loadChildren: () =>
          import('app/modules/auth/sign-out/sign-out.module').then(
            (m: any) => m.AuthSignOutModule
          ),
      },
      {
        path: 'unlock-session',
        loadChildren: () =>
          import('app/modules/auth/unlock-session/unlock-session.module').then(
            (m: any) => m.AuthUnlockSessionModule
          ),
      },
    ],
  },

  // Landing routes
  {
    path: '',
    component: LayoutComponent,
    data: {
      layout: 'empty',
    },
    children: [
      {
        path: 'home',
        loadChildren: () =>
          import('app/modules/landing/home/home.module').then(
            (m: any) => m.LandingHomeModule
          ),
      },
    ],
  },

  // Admin routes
  {
    path: '',
    canActivate: [AuthGuard],
    canActivateChild: [AuthGuard],
    component: LayoutComponent,
    resolve: {
      initialData: InitialDataResolver,
    },
    children: [
      // Dashboards
      {
        path: 'dashboards',
        children: [
          {
            path: 'user',
            loadChildren: () =>
              import('app/modules/admin/dashboards/user/user.module').then(
                (m: any) => m.UserModule
              ),
          },
        ],
      },

      // Apps
      {
        path: 'member',
        children: [
          {
            path: 'user',
            loadChildren: () =>
              import('app/modules/admin/member/user/user.module').then(
                (m: any) => m.UserModule
              ),
          },
          {
            path: 'casino-money',
            loadChildren: () =>
              import(
                'app/modules/admin/member/casino-money/casino-money.module'
              ).then((m: any) => m.CasinoMoneyModule),
          },
          {
            path: 'unconnected',
            loadChildren: () =>
              import(
                'app/modules/admin/member/unconnected/unconnected.module'
              ).then((m: any) => m.UnconnectedModule),
          },
          {
            path: 'current-user',
            loadChildren: () =>
              import(
                'app/modules/admin/member/current-user/current-user.module'
              ).then((m: any) => m.CurrentUserModule),
          },
          {
            path: 'partner',
            loadChildren: () =>
              import('app/modules/admin/member/partner/partner.module').then(
                (m: any) => m.PartnerModule
              ),
          },
          // {
          //   path: 'partner-mainoffice',
          //   loadChildren: () =>
          //     import(
          //       'app/modules/admin/member/partner-mainoffice/partner-mainoffice.module'
          //     ).then((m: any) => m.PartnerMainofficeModule),
          // },
          // {
          //   path: 'partner-branch',
          //   loadChildren: () =>
          //     import(
          //       'app/modules/admin/member/partner-branch/partner-branch.module'
          //     ).then((m: any) => m.PartnerBranchModule),
          // },
          // {
          //   path: 'partner-division',
          //   loadChildren: () =>
          //     import(
          //       'app/modules/admin/member/partner-division/partner-division.module'
          //     ).then((m: any) => m.PartnerDivisionModule),
          // },
          // {
          //   path: 'partner-office',
          //   loadChildren: () =>
          //     import(
          //       'app/modules/admin/member/partner-office/partner-office.module'
          //     ).then((m: any) => m.PartnerOfficeModule),
          // },
          // {
          //   path: 'partner-store',
          //   loadChildren: () =>
          //     import(
          //       'app/modules/admin/member/partner-store/partner-store.module'
          //     ).then((m: any) => m.PartnerStoreModule),
          // },
          {
            path: 'partner-recommendation',
            loadChildren: () =>
              import(
                'app/modules/admin/member/partner-recommendation/partner-recommendation.module'
              ).then((m: any) => m.PartnerRecommendationModule),
          },
          {
            path: 'coupon',
            loadChildren: () =>
              import('app/modules/admin/member/coupon/coupon.module').then(
                (m: any) => m.CouponModule
              ),
          },
          {
            path: 'coupon-money-log',
            loadChildren: () =>
              import(
                'app/modules/admin/member/coupon-money-log/coupon-money-log.module'
              ).then((m: any) => m.CouponMoneyLogModule),
          },
          {
            path: 'coupon-log',
            loadChildren: () =>
              import(
                'app/modules/admin/member/coupon-log/coupon-log.module'
              ).then((m: any) => m.CouponLogModule),
          },
        ],
      },
      {
        path: 'bank',
        children: [
          {
            path: 'deposit',
            loadChildren: () =>
              import('app/modules/admin/bank/deposit/deposit.module').then(
                (m: any) => m.DepositModule
              ),
          },
          {
            path: 'withdraw',
            loadChildren: () =>
              import('app/modules/admin/bank/withdraw/withdraw.module').then(
                (m: any) => m.WithdrawModule
              ),
          },
          {
            path: 'web-calculate',
            loadChildren: () =>
              import(
                'app/modules/admin/bank/web-calculate/web-calculate.module'
              ).then((m: any) => m.WebCalculateModule),
          },
          {
            path: 'partner-calculate',
            loadChildren: () =>
              import(
                'app/modules/admin/bank/partner-calculate/partner-calculate.module'
              ).then((m: any) => m.PartnerCalculateModule),
          },
        ],
      },
      {
        path: 'game',
        children: [
          {
            path: 'powerball',
            loadChildren: () =>
              import('app/modules/admin/game/powerball/powerball.module').then(
                (m: any) => m.PowerballModule
              ),
          },
          {
            path: 'casino',
            loadChildren: () =>
              import('app/modules/admin/game/casino/casino.module').then(
                (m: any) => m.CasinoModule
              ),
          },
          {
            path: 'evolution',
            loadChildren: () =>
              import('app/modules/admin/game/evolution/evolution.module').then(
                (m: any) => m.EvolutionModule
              ),
          },
          {
            path: 'slot',
            loadChildren: () =>
              import('app/modules/admin/game/slot/slot.module').then(
                (m: any) => m.SlotModule
              ),
          },
        ],
      },
      {
        path: 'settings',
        children: [
          {
            path: 'basic',
            loadChildren: () =>
              import('app/modules/admin/settings/basic/basic.module').then(
                (m: any) => m.BasicModule
              ),
          },
          {
            path: 'ladder',
            loadChildren: () =>
              import('app/modules/admin/settings/ladder/ladder.module').then(
                (m: any) => m.LadderModule
              ),
          },
          {
            path: 'game',
            loadChildren: () =>
              import('app/modules/admin/settings/game/game.module').then(
                (m: any) => m.GameModule
              ),
          },
          {
            path: 'evo',
            loadChildren: () =>
              import('app/modules/admin/settings/evo/evo.module').then(
                (m: any) => m.EvoModule
              ),
          },
          {
            path: 'branch',
            loadChildren: () =>
              import('app/modules/admin/settings/branch/branch.module').then(
                (m: any) => m.BranchModule
              ),
          },
          {
            path: 'indexing',
            loadChildren: () =>
              import(
                'app/modules/admin/settings/indexing/indexing.module'
              ).then((m: any) => m.IndexingModule),
          },
          {
            path: 'domain',
            loadChildren: () =>
              import('app/modules/admin/settings/domain/domain.module').then(
                (m: any) => m.DomainModule
              ),
          },
        ],
      },
      {
        path: 'report',
        children: [
          {
            path: 'daily',
            loadChildren: () =>
              import('app/modules/admin/report/daily/daily.module').then(
                (m: any) => m.DailyModule
              ),
          },
          {
            path: 'monthly',
            loadChildren: () =>
              import('app/modules/admin/report/monthly/monthly.module').then(
                (m: any) => m.MonthlyModule
              ),
          },
          {
            path: 'daily-partner',
            loadChildren: () =>
              import(
                'app/modules/admin/report/daily-partner/daily-partner.module'
              ).then((m: any) => m.DailyPartnerModule),
          },
          {
            path: 'today-bet',
            loadChildren: () =>
              import(
                'app/modules/admin/report/today-bet/today-bet.module'
              ).then((m: any) => m.TodayBetModule),
          },
          {
            path: 'statistics',
            loadChildren: () =>
              import(
                'app/modules/admin/report/statistics/statistics.module'
              ).then((m: any) => m.StatisticsModule),
          },
          {
            path: 'money-log',
            loadChildren: () =>
              import(
                'app/modules/admin/report/money-log/money-log.module'
              ).then((m: any) => m.MoneyLogModule),
          },
          {
            path: 'comp-log',
            loadChildren: () =>
              import('app/modules/admin/report/comp-log/comp-log.module').then(
                (m: any) => m.CompLogModule
              ),
          },
          {
            path: 'modification-log',
            loadChildren: () =>
              import(
                'app/modules/admin/report/modification-log/modification-log.module'
              ).then((m: any) => m.ModificationLogModule),
          },
          {
            path: 'payment-log',
            loadChildren: () =>
              import(
                'app/modules/admin/report/payment-log/payment-log.module'
              ).then((m: any) => m.PaymentLogModule),
          },
          {
            path: 'user-session',
            loadChildren: () =>
              import(
                'app/modules/admin/report/user-session/user-session.module'
              ).then((m: any) => m.UserSessionModule),
          },
          {
            path: 'duplicated-session',
            loadChildren: () =>
              import(
                'app/modules/admin/report/duplicated-session/duplicated-session.module'
              ).then((m: any) => m.DuplicatedSessionModule),
          },
          {
            path: 'admin-session',
            loadChildren: () =>
              import(
                'app/modules/admin/report/admin-session/admin-session.module'
              ).then((m: any) => m.AdminSessionModule),
          },
          {
            path: 'excel-log',
            loadChildren: () =>
              import(
                'app/modules/admin/report/excel-log/excel-log.module'
              ).then((m: any) => m.ExcelLogModule),
          },
          {
            path: 'loosing',
            loadChildren: () =>
              import('app/modules/admin/report/loosing/loosing.module').then(
                (m: any) => m.LoosingModule
              ),
          },
        ],
      },
      {
        path: 'board',
        children: [
          {
            path: 'notice',
            loadChildren: () =>
              import('app/modules/admin/board/notice/notice.module').then(
                (m: any) => m.NoticeModule
              ),
          },
          {
            path: 'notice-oneline',
            loadChildren: () =>
              import(
                'app/modules/admin/board/notice-oneline/notice-oneline.module'
              ).then((m: any) => m.NoticeOnelineModule),
          },
          {
            path: 'popup',
            loadChildren: () =>
              import('app/modules/admin/board/popup/popup.module').then(
                (m: any) => m.PopupModule
              ),
          },
          {
            path: 'message',
            loadChildren: () =>
              import('app/modules/admin/board/message/message.module').then(
                (m: any) => m.MessageModule
              ),
          },
          {
            path: 'customer',
            loadChildren: () =>
              import('app/modules/admin/board/customer/customer.module').then(
                (m: any) => m.CustomerModule
              ),
          },
          {
            path: 'customer-template',
            loadChildren: () =>
              import(
                'app/modules/admin/board/customer-template/customer-template.module'
              ).then((m: any) => m.CustomerTemplateModule),
          },
        ],
      },
    ],
  },
];
