import express, { Router } from 'express';

import authRoute from '@/modules/auth/auth.route';
import userRoute from '@/modules/user/user.route';
import locationRoute from '@/modules/master/location/location.route';
import propertyMasterRoute from '@/modules/master/property/property.route';
import constructionStatusRoute from '@/modules/master/constructionStatus/constructionStatus.route';
import masterBankRoute from '@/modules/master/bank/bank.route';
import companyRoute from '@/modules/company/company.route';
import roleRoute from '@/modules/roles/roles.route';
import individualPropertiesRoute from '../modules/individualProperties/individualProperties.route';
import R2Route from '@/shared/core/R2/R2.route';
import permissionRoute from '@/modules/permissions/permissions.route';
import contactRoute from '@/modules/contacts/contacts.route';
import leadStageRoute from '@/modules/master/leadStage/leadStage.route';
import teamRoute from '@/modules/teams/teams.route';
import supportRoute from '@/modules/support/support.route';
import makanifySitesRoute from '@/modules/makanifySites/makanifySites.route';
import leadRoute from '@/modules/lead/lead.route';
import bankAccountRoute from '@/modules/bankAccount/bankAccount.route';
import projectRoute from '@/modules/project/project.route';
import tasksRoute from '@/modules/tasks/tasks.route';
import targetsRoute from '@/modules/targets/targets.route';
import paymentPlanRoute from '@/modules/paymentPlan/paymentPlan.route';
import projectChargeRoute from '@/modules/projectCharge/projectCharge.route';
import invoiceSettingsRoute from '@/modules/InvoiceSettings/invoiceSettings.route';
import documentsRoute from '@/modules/documents/documents.route';
import quotationRoute from '@/modules/quotation/quotation.route';
import activityRoute from '@/modules/activity/activity.route';
import invoiceRoute from '@/modules/invoice/invoice.route';
import bookHoldRoute from '@/modules/activity/unitBookingOrHold/unitBookingOrHold.route';
import unitRoute from '@/modules/project/unit/unit.route';
import notificationRoute from '@/modules/notification/notification.route';
import pushNotificationRoute from '@/modules/pushNotification/pushNotification.route';
import customerRoute from '@/modules/customer/customer.route';
import campaignRoute from '@/modules/campaign/campaign.route';
import customFieldsRoute from '@/modules/customFields/customFields.route';
import partnerNetworkRoute from '@/modules/partnerNetwork/partnerNetwork.route';
import leadScoreRoute from '@/modules/leadScore/leadScore.route';
import rulesRoute from '@/modules/rules/rules.route';
import dashboardRoute from '@/modules/dashboard/dashboard.route';
import whatsappRoute from '@/modules/communication/whatsapp/whatsapp.route';
import fast2smsRoute from '@/modules/communication/fast2sms/fast2sms.route';
import clickStatsRoute from '@/modules/clickStats/clickStats.routes';
import reportRoute from '@/modules/reports/reports.route';
import emailRoute from '@/modules/communication/email/email.route';
import captureLeadRoute from '@/modules/captureLeads/captureLead.route';
import analyticsRoute from '@/modules/analytics/analytics.routes';
import myoperatorRoute from '@/modules/myoperator/myoperator.route';
import channelPartnerRoute from '@/modules/channelPartner/channelPartner.route';

const router = express.Router();

interface IRoute {
  path: string;
  route: Router;
}

const defaultIRoute: IRoute[] = [
  {
    path: '/auth',
    route: authRoute,
  },
  {
    path: '/users',
    route: userRoute,
  },
  {
    path: '/location',
    route: locationRoute,
  },
  {
    path: '/propertyMaster',
    route: propertyMasterRoute,
  },
  {
    path: '/constructionStatus',
    route: constructionStatusRoute,
  },
  {
    path: '/master/banks',
    route: masterBankRoute,
  },
  {
    path: '/company',
    route: companyRoute,
  },
  {
    path: '/role',
    route: roleRoute,
  },
  {
    path: '/individual-properties',
    route: individualPropertiesRoute,
  },
  {
    path: '/upload',
    route: R2Route,
  },
  {
    path: '/permission',
    route: permissionRoute,
  },
  {
    path: '/contact',
    route: contactRoute,
  },
  {
    path: '/lead-stage',
    route: leadStageRoute,
  },
  {
    path: '/team',
    route: teamRoute,
  },
  {
    path: '/support',
    route: supportRoute,
  },
  {
    path: '/makanify-sites',
    route: makanifySitesRoute,
  },
  {
    path: '/lead',
    route: leadRoute,
  },
  {
    path: '/bankAccount',
    route: bankAccountRoute,
  },
  {
    path: '/project',
    route: projectRoute,
  },
  {
    path: '/tasks',
    route: tasksRoute,
  },
  {
    path: '/targets',
    route: targetsRoute,
  },
  {
    path: '/paymentPlan',
    route: paymentPlanRoute,
  },
  {
    path: '/projectCharge',
    route: projectChargeRoute,
  },
  {
    path: '/invoice-settings',
    route: invoiceSettingsRoute,
  },
  {
    path: '/documents',
    route: documentsRoute,
  },
  {
    path: '/quotation',
    route: quotationRoute,
  },
  {
    path: '/quotationTerms',
    route: quotationRoute,
  },
  {
    path: '/activity',
    route: activityRoute,
  },
  {
    path: '/invoice',
    route: invoiceRoute,
  },
  {
    path: '/book-hold',
    route: bookHoldRoute,
  },
  {
    path: '/unit',
    route: unitRoute,
  },
  {
    path: '/notification',
    route: notificationRoute,
  },
  {
    path: '/pushNotification',
    route: pushNotificationRoute,
  },
  {
    path: '/customers',
    route: customerRoute,
  },
  {
    path: '/campaign',
    route: campaignRoute,
  },
  {
    path: '/custom-fields',
    route: customFieldsRoute,
  },
  {
    path: '/partner-network',
    route: partnerNetworkRoute,
  },
  {
    path: '/leadScore',
    route: leadScoreRoute,
  },
  {
    path: '/rules',
    route: rulesRoute,
  },
  {
    path: '/dashboard',
    route: dashboardRoute,
  },
  {
    path: '/whatsapp',
    route: whatsappRoute,
  },
  {
    path: '/fast2sms',
    route: fast2smsRoute,
  },
  {
    path: '/clickStats',
    route: clickStatsRoute,
  },
  {
    path: '/reports',
    route: reportRoute,
  },
  {
    path: '/email',
    route: emailRoute,
  },
  {
    path: '/captureLeads',
    route: captureLeadRoute,
  },
  {
    path: '/analytics',
    route: analyticsRoute,
  },
  {
    path: '/myoperator',
    route: myoperatorRoute,
  },
  {
    path: '/channel-partner',
    route: channelPartnerRoute,
  },
];

defaultIRoute.forEach((route) => {
  router.use(route.path, route.route);
});

export default router;
