import { NgModule } from "@angular/core";
import { Routes, RouterModule } from "@angular/router";
import { MainLayoutComponent } from "./layout/main-layout/main-layout.component";
import { AuthGuard } from "./core/guards/auth.guard";
import { settingFinanceRoutes } from "./feature/settings-finance/routes";
import { examRegisterRoutes } from "./feature/exam-register/routes";

const routes: Routes = [
  {
    path: "",
    pathMatch: "full",
    redirectTo: "/setting-exam",
  },
  {
    path: "auth",
    loadChildren: () =>
      import("./feature/auth-callback/auth-callback.module").then(
        (x) => x.AuthCallbackModule
      ),
  },
  {
    path: "",
    component: MainLayoutComponent,
    canActivate: [AuthGuard],
    canActivateChild: [AuthGuard],
    children: [
      ...settingFinanceRoutes,
      ...examRegisterRoutes,
      {
        path: "home",
        loadChildren: () =>
          import("./feature/default/default.module").then((m) => m.DefaultModule),
      },
      {
        path: "change-exam-room",
        loadChildren: () =>
          import("./feature/change-exam-room/change-exam-room.module").then((m) => m.ChangeExamRoomModule),
          data: {
            menu: 'ย้ายห้องสอบ',
          }
      },
      {
        path: "change-password",
        loadChildren: () =>
          import("./feature/change-password/change-password.module").then((m) => m.ChangePasswodModule),
      },
      {
        path: "report",
        loadChildren: () =>
          import("./feature/report/report.module").then((m) => m.ReportModule),
          data: {
            menu: 'รายงาน',
          }
      },
      {
        path: "import-payment",
        loadChildren: () =>
          import("./feature/manage-payment/import/import.module").then(
            (m) => m.ImportModule
          ),
          data: {
            menu: 'จัดการรายการชำระเงิน',
            sub_menu: 'นำเข้ารายการชำระเงิน'
          }
      },
      {
        path: "confirm-payment",
        loadChildren: () =>
          import("./feature/manage-payment/confirm/confirm.module").then(
            (m) => m.ConfirmModule
          ),
          data: {
            menu: 'จัดการรายการชำระเงิน',
            sub_menu: 'ยืนยันรายการชำระเงิน'
          }
      },
      {
        path: "manage-exam-officer",
        loadChildren: () =>
          import(
            "./feature/exam-setting/manage-exam-officer/manage-exam-officer.module"
          ).then((m) => m.ManageExamOfficerModule),
          data: {
            menu: 'กำหนดข้อมูลการสอบ',
            sub_menu: 'กำหนดกรรมการคุมสอบ'
          }
      },
      {
        path: "create-user",
        loadChildren: () =>
          import(
            "./feature/set-permission/create-user/create-user.module"
          ).then((m) => m.CreateUserModule),
          data: {
            menu: 'กำหนดสิทธิ์',
            sub_menu: 'สร้าง User'
          }
      },
      {
        path: "set-user",
        loadChildren: () =>
          import("./feature/set-permission/set-user/set-user.module").then(
            (m) => m.SetUserModule
          ),
          data: {
            menu: 'กำหนดสิทธิ์',
            sub_menu: 'User ผู้ใช้งาน'
          }
      },
      {
        path: "set-role",
        loadChildren: () =>
          import("./feature/set-permission/set-role/set-role.module").then(
            (m) => m.SetRoleModule
          ),
          data: {
            menu: 'กำหนดสิทธิ์',
            sub_menu: 'กลุ่มสิทธิ์'
          }
      },
      {
        path: "change-exam-day",
        loadChildren: () =>
          import("./feature/change-exam-day/change-exam-day.module").then(
            (m) => m.ChangeExamDayModule
          ),
          data: {
            menu: 'ขออนุมัติเปลี่ยนวันสอบ'
          }
      },
      {
        path: "testing-field",
        loadChildren: () =>
          import("./feature/settings/testing-field/testing-field.module").then(
            (m) => m.TestingFieldModule
          ),
          data: {
            menu: 'ตั้งค่าข้อมูลตั้งต้น',
            sub_menu: 'จัดการสนามสอบ'
          }
      },
      {
        path: "candidate-list",
        loadChildren: () =>
          import("./feature/candidate-list/candidate-list/candidate-list.module").then(
            (m) => m.CandidateListModule
          ),
        data: {
          menu: 'จัดการรายชื่อผู้เข้าสอบ',
          sub_menu: 'ข้อมูลผู้สอบ'
        }
      },
      {
        path: "check-candidate-list",
        loadChildren: () =>
          import("./feature/candidate-list/check-candidate-list/check-candidate-list.module").then(
            (m) => m.CheckCandidateListModule
          ),
        data: {
          menu: 'จัดการรายชื่อผู้เข้าสอบ',
          sub_menu: 'สร้างข้อสอบ'
        }
      },
      {
        path: "approve-examination",
        loadChildren: () =>
          import("./feature/approve-examination/approve-examination.module").then(
            (m) => m.ApproveExaminationModule
          ),
        data: {
          menu: 'ปล่อยข้อสอบ'
        }
      },
      {
        path: "change-exam-information",
        loadChildren: () =>
          import(
            "./feature/exam-setting/change-exam-information/change-exam-information.module"
          ).then((m) => m.ChangeExamInformationModule),
          data: {
            menu: 'กำหนดข้อมูลการสอบ',
            sub_menu: 'ขยายรอบสอบ'
          }
      },
      {
        path: "grade-summary",
        loadChildren: () =>
          import(
            "./feature/exam-setting/grade-summary/grade-summary.module"
          ).then((m) => m.GradeSummaryModule),
          data: {
            menu: 'กำหนดข้อมูลการสอบ',
            sub_menu: 'กำหนดเกณฑ์คะแนน'
          }
      },
      {
        path: "random-questions",
        loadChildren: () =>
          import(
            "./feature/exam-setting/random-questions/random-questions.module"
          ).then((m) => m.RandomQuestionsModule),
          data: {
            menu: 'กำหนดข้อมูลการสอบ',
            sub_menu: 'สร้างเงื่อนไขการสุ่มคำถาม'
          }
      },
      {
        path: "academic-semesters",
        loadChildren: () =>
          import(
            "./feature/settings/academic-semesters/academic-semesters.module"
          ).then((m) => m.AcademicSemestersModule),
          data: {
            menu: 'ตั้งค่าข้อมูลตั้งต้น',
            sub_menu: 'ภาคการศึกษา'
          }
      },
      {
        path: "department",
        loadChildren: () =>
          import(
            "./feature/settings/department/department.module"
            ).then((m) => m.DepartmentModule),
        data: {
          menu: 'ตั้งค่าข้อมูลตั้งต้น',
          sub_menu: 'สร้างภาควิชา'
        }
      },
      {
        path: "academic-years",
        loadChildren: () =>
          import(
            "./feature/settings/academic-years/academic-years.module"
            ).then((m) => m.AcademicYearsModule),
        data: {
          menu: 'ตั้งค่าข้อมูลตั้งต้น',
          sub_menu: 'ปีการศึกษา'
        }
      },
      {
        path: "testing-vdos",
        loadChildren: () =>
          import(
            "./feature/settings/testing-vdos/testing-vdos.module"
            ).then((m) => m.TestingVdosModule),
        data: {
          menu: 'ตั้งค่าข้อมูลตั้งต้น',
          sub_menu: 'วิดีโอ'
        }
      },
      {
        path: "faculties",
        loadChildren: () =>
          import("./feature/settings/faculties/faculties.module").then(
            (m) => m.FacultiesModule
          ),
          data: {
            menu: 'ตั้งค่าข้อมูลตั้งต้น',
            sub_menu: 'ข้อมูลหน่วยงานคณะ'
          }
      },
      {
        path: "subject-type",
        loadChildren: () =>
          import("./feature/settings/typesubject/typesubject.module").then(
            (m) => m.TypesubjectModule
          ),
          data: {
            menu: 'ตั้งค่าข้อมูลตั้งต้น',
            sub_menu: 'ประเภทวิชา'
          }
      },
      {
        path: "calendars",
        loadChildren: () =>
          import("./feature/settings/calendars/calendars.module").then(
            (m) => m.CalendarsModule
          ),
          data: {
            menu: 'ตั้งค่าข้อมูลตั้งต้น',
            sub_menu: 'รายการปฎิทิน'
          }
      },
      {
        path: "branch",
        loadChildren: () =>
          import("./feature/settings/testcenter/testcenter.module").then(
            (m) => m.TestcenterModule
          ),
          data: {
            menu: 'ตั้งค่าข้อมูลตั้งต้น',
            sub_menu: 'สร้างศูนย์สอบ'
          }
      },
      {
        path: "online-counter",
        loadChildren: () =>
          import("./feature/settings/online-counter/online-counter.module").then(
            (m) => m.OnlineCounterModule
          ),
          data: {
            menu: 'ตั้งค่าข้อมูลตั้งต้น',
            sub_menu: 'ชื่อเค้าเตอร์รับเงินออนไลน์'
          }
      },
      {
        path: "signature",
        loadChildren: () =>
          import("./feature/settings/signature/signature.module").then(
            (m) => m.SignatureModule
          ),
          data: {
            menu: 'ตั้งค่าข้อมูลตั้งต้น',
            sub_menu: 'ลายเซ็นผู้รับเงิน'
          }
      },
      {
        path: "candidate-payment-status",
        loadChildren: () =>
          import("./feature/candidate-payment-status/candidate-payment-status.module").then(
            (m) => m.CandidatePaymentStatusModule
          ),
          data: {
            menu: 'จัดการรายชื่อผู้เข้าสอบ',
            sub_menu: 'สถานะการชำระค่าสมัคร'
          }
      },
      {
        path: "education-type",
        loadChildren: () =>
          import(
            "./feature/settings/education-type/education-type.module"
          ).then((m) => m.EducationTypeModule),
          data: {
            menu: 'ตั้งค่าข้อมูลตั้งต้น',
            sub_menu: 'ข้อมูลระดับการศึกษา'
          }
      },
      {
        path: "setting-exam",
        loadChildren: () =>
          import("./feature/setting-exam/setting-exam.module").then(
            (m) => m.SettingExamModule
          ),
          data: {
            menu: 'กำหนดรายวิชาสอบ',
          }
      },
      {
        path: "manage-test-center",
        loadChildren: () =>
          import("./feature/manage-test-center/manage-test-center.module").then(
            (m) => m.ManageTestCenterModule
          ),
          data: {
            menu: 'การจัดการศูนย์สอบ'
          }
      },
      {
        path: "exam-information",
        loadChildren: () =>
          import(
            "./feature/set-exam-information/set-exam-information.module"
          ).then((m) => m.SetExamInformationModule),
          data: {
            menu: 'กำหนดข้อมูลการสอบ',
            sub_menu: 'ตรวจสอบข้อมูลรอบสอบ'
          }
      },
      {
        path: "approve-exam",
        loadChildren: () =>
          import(
            "./feature/create-exam/approve-exam/approve-exam.module"
            ).then((m) => m.ApproveExamModule),
        data: {
          menu: 'กำหนดข้อมูลการสอบ',
          sub_menu: 'เปิดรอบสอบ'
        }
      },
      {
        path: "reject-exam",
        loadChildren: () =>
          import(
            "./feature/create-exam/reject-exam/reject-exam.module"
            ).then((m) => m.RejectExamModule),
        data: {
          menu: 'กำหนดข้อมูลการสอบ',
          sub_menu: 'ปิดรอบสอบ'
        }
      },
      {
        path: "user-counter",
        loadChildren: () =>
          import(
            "./feature/set-permission/user-couter/user-couter.module"
          ).then((m) => m.UserCouterModule),
          data: {
            menu: 'กำหนดสิทธิ์',
            sub_menu: 'User Counter รับสมัคร'
          }
      },
      {
        path: "print-exam-card",
        loadChildren: () =>
          import(
            "./feature/print-exam-card/print-exam-card.module"
          ).then((m) => m.PrintExamCardModule),
          data: {
            menu: 'พิมพ์บัตรเข้าห้องสอบ'
          }
      },
      {
        path: "setting-print-card",
        loadChildren: () =>
          import(
            "./feature/setting-print-card/setting-print-card.module"
          ).then((m) => m.SettingPrintCardModule),
          data: {
            menu: 'ตั้งค่าเวลาพิมพ์บัตร'
          }
      },
      {
        path: "print-exam-result",
        loadChildren: () =>
          import(
            "./feature/print-exam-result/print-exam-result.module"
          ).then((m) => m.PrintExamResultModule),
          data: {
            menu: 'พิมพ์ผลสอบ'
          }
      },
      {
        path: "student-info",
        loadChildren: () =>
          import(
            "./feature/upload-student/upload-student.module"
          ).then((m) => m.UploadStudentModule),
          data: {
            menu: 'อัพโหลดข้อมูลผู้เข้าสอบ'
          }
      },
      {
        path: "check-student-info",
        loadChildren: () =>
          import(
            "./feature/student-info/student-info.module"
          ).then((m) => m.StudentInfoModule),
          data: {
            menu: 'ตรวจสอบข้อมูลผู้สมัคร'
          }
      },
      {
        path: "create-exam-seat",
        loadChildren: () =>
          import(
            "./feature/create-exam-seat/create-exam-seat.module"
          ).then((m) => m.CreatExamSeatModule),
          data: {
            menu: 'สร้างเลขที่นั่งสอบ'
          }
      },
      {
        path: "notification-check-exam",
        loadChildren: () =>
          import(
            "./feature/notification-check-exam/notification-check-exam.module"
            ).then((m) => m.NotificationCheckExamModule),
        data: {
          menu: 'แจ้งเตือนการตรวจสอบ'
        }
      },
      {
        path: "create-exam-information",
        loadChildren: () =>
          import(
            "./feature/create-exam/create-exam-information/create-exam-information.module"
            ).then((m) => m.CreateExamInformationModule),
        data: {
          menu: 'กำหนดข้อมูลรอบสอบ',
          sub_menu: 'ข้อมูลพื้นฐาน'
        }
      },
      {
        path: "create-exam-subject",
        loadChildren: () =>
          import(
            "./feature/create-exam/create-exam-subject/create-exam-subject.module"
            ).then((m) => m.CreateExamSubjectModule),
        data: {
          menu: 'กำหนดข้อมูลรอบสอบ',
          sub_menu: 'กำหนดวิชาสอบ'
        }
      },
      {
        path: "create-exam-room",
        loadChildren: () =>
          import(
            "./feature/create-exam/create-exam-room/create-exam-room.module"
            ).then((m) => m.CreateExamRoomModule),
        data: {
          menu: 'กำหนดข้อมูลรอบสอบ',
          sub_menu: 'กำหนดห้องสอบ'
        }
      },
      {
        path: "create-exam-condition",
        loadChildren: () =>
          import(
            "./feature/create-exam/create-exam-condition/create-exam-condition.module"
            ).then((m) => m.CreateExamConditionModule),
        data: {
          menu: 'กำหนดข้อมูลรอบสอบ',
          sub_menu: 'กำหนดเงื่อนไข'
        }
      },
      {
        path: "create-exam-calendar",
        loadChildren: () =>
          import(
            "./feature/create-exam/create-exam-calendar/create-exam-calendar.module"
            ).then((m) => m.CreateExamCalendarModule),
        data: {
          menu: 'กำหนดข้อมูลรอบสอบ',
          sub_menu: 'กำหนดปฏิทิน'
        }
      },
      {
        path: "seat-change",
        loadChildren: () =>
          import(
            "./feature/candidate-list/seat-change/seat-change.module"
            ).then((m) => m.SeatChangeModule),
        data: {
          menu: 'จัดการที่นั่งสอบกับห้องสอบ',
          sub_menu: 'ย้ายวันสอบ'
        }
      },
      {
        path: 'daily-summary-ttb',
        loadChildren: () =>
          import('./feature/exam-register/daily-summary-ttb/daily-summary-ttb.module').then(
            (m) => m.DailySummaryTtbModule
          ),
        data: {
          menu: 'ลงทะเบียนสอบ',
          sub_menu: 'รายงานรับเงิน TTB',
        },
      },
      {
        path: "special-period",
        loadChildren: () =>
          import(
            "./feature/create-exam/create-exam-setup-period-by-subject/create-exam-setup-period-by-subject.module"
            ).then((m) => m.CreateExamSetupPeriodBySubjectModule),
        data: {
          menu: 'กำหนดข้อมูลรอบสอบ',
          sub_menu: 'กำหนดวันสอบของวิชา'
        }
      },
      {
        path: "online-summary",
        loadChildren: () =>
          import(
            "./feature/online-summary/online-summary.module"
            ).then((m) => m.OnlineSummaryModule),
        data: {
          menu: 'ลงทะเบียนสอบ',
          sub_menu: 'รายงานรับเงินออนไลน์'
        }
      },
      {
        path: 'register-cancel',
        loadChildren: () =>
          import(
            "./feature/exam-register/register-cancel/register-cancel.module"
            ).then((m) => m.RegisterCancelModule),
        data: {
          menu: 'ลงทะเบียนสอบ',
          sub_menu: 'ยกเลิกรายการสมัคร'
        }
      },
      {
        path: 'extend-information-date',
        loadChildren: () =>
          import(
            './feature/extend-information/extend-information-date/extend-information-date.module'
            ).then((m) => m.ExtendInformationDateModule),
        data: {
          menu: 'ขยายรอบสอบ(ที่เปิดแล้ว)',
          sub_menu: 'ขยายวันที่สอบ'
        }
      },
      {
        path: 'extend-information-room',
        loadChildren: () =>
          import(
            './feature/extend-information/extend-information-room/extend-information-room.module'
            ).then((m) => m.ExtendInformationRoomModule),
        data: {
          menu: 'ขยายรอบสอบ(ที่เปิดแล้ว)',
          sub_menu: 'จัดการห้องสอบ'
        }
      },
    ],
  },
];

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