import "dotenv/config";
import express, { Response } from "express";
import bankRoutes from "./routes/bank.route";
import cashfreeRoutes from "./routes/cashfree.route";
import clientRoutes from "./routes/client.route";
import complaintRoutes from "./routes/complaint.route";
import dueRoutes from "./routes/due.route";
import noticeRoutes from "./routes/notice.route";
import notificationRoutes from "./routes/notification.route";
import settingsRoutes from "./routes/settings.route";
import propertyRoutes from "./routes/property.route";
import flatRoutes from "./routes/flat.route";
import roomRoutes from "./routes/room.route";
import staffRoutes from "./routes/staff.route";
import tenantRoutes from "./routes/tenant.route";
import transactionRoutes from "./routes/transaction.route";
import ledgerRoutes from "./routes/ledger.route";
import extraChargesRoutes from "./routes/extraCharges.route";
import electricityRoutes from "./routes/electricity.route";
import expenseRoutes from "./routes/expense.route";
import vendorRoutes from "./routes/vendor.route";
import landlordRoutes from "./routes/landlords.route";
import leadRoutes from "./routes/lead.route";
import CustomRequest from "./types/requestType";
import generateHashRoutes from "./routes/payu.route";
import EasebuzzRoutes from "./routes/easebuzz.route";
import feedbackRoutes from "./routes/feedback.route";
import eqaroRoutes from "./routes/eqaro.route";
import activityLogsRoutes from "./routes/activityLogs.route";
import assetsRoutes from "./routes/assets.route";
import reportsRoutes from "./routes/reports.route";
import foodRoutes from "./routes/food.route";
import parcelRoutes from "./routes/parcel.route";
import discountRoutes from "./routes/discount.route"
import staffCommissionRoutes from "./routes/staffCommission.route"
import facilityRoutes from "./routes/facility.route"
import transitRoutes from "./routes/transitService.route"
import laundryRoutes from "./routes/laundry.route"
import officialDocumentRoutes from "./routes/officialDocument.route"
import bookingsRoutes from "./routes/bookings.route"
import kitchenInventoryRoutes from "./routes/kitchenInventory.route"
import wifiCredentialRoutes from "./routes/wifiCredential.route"
import walletRoutes from "./routes/wallet.route"
import autopayRoutes from "./routes/autopay.route"
import staffTaskRoutes from "./routes/staffTasks.route"
import cors from "cors";
import { connectRedis } from "./config/redis/redis";

// import cashfree from "./controllers/cashfree.controller";
// import eqaro from "./controllers/eqaro.controller";
// import settings from "./controllers/settings.controller";

const app = express();

// Middlewares
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use("/uploads", express.static("uploads"));
app.use(cors());

// Routes
app.use("/api/tenant", tenantRoutes);
app.use("/api/cashfree", cashfreeRoutes);
app.use("/api/client", clientRoutes);
app.use("/api/staff", staffRoutes);
app.use("/api/property", propertyRoutes);
app.use("/api/flat", flatRoutes);
app.use("/api/room", roomRoutes);
app.use("/api/complaint", complaintRoutes);
app.use("/api/notice", noticeRoutes);
app.use("/api/transaction", transactionRoutes);
app.use("/api/ledger", ledgerRoutes);
app.use("/api/bank", bankRoutes);
app.use("/api/due", dueRoutes);
app.use("/api/notification", notificationRoutes);
app.use("/api/settings", settingsRoutes);
app.use("/api/extra-charges", extraChargesRoutes);
app.use("/api/electricity", electricityRoutes);
app.use("/api/expense", expenseRoutes);
app.use("/api/vendor", vendorRoutes);
app.use("/api/landlord", landlordRoutes);
app.use("/api/hash", generateHashRoutes);
app.use("/api/easebuzz", EasebuzzRoutes);
app.use("/api/lead", leadRoutes);
app.use("/api/feedback", feedbackRoutes);
app.use("/api/eqaro", eqaroRoutes);
app.use("/api/activity-log", activityLogsRoutes);
app.use("/api/asset", assetsRoutes);
app.use("/api/report", reportsRoutes);
app.use("/api/food", foodRoutes);
app.use("/api/parcel", parcelRoutes);
app.use("/api/discount", discountRoutes);
app.use("/api/staff-commission", staffCommissionRoutes);
app.use("/api/facility", facilityRoutes);
app.use("/api/transit", transitRoutes);
app.use("/api/laundry", laundryRoutes);
app.use("/api/official-documents", officialDocumentRoutes);
app.use("/api/bookings", bookingsRoutes);
app.use("/api/kitchen", kitchenInventoryRoutes);
app.use("/api/wifiCred", wifiCredentialRoutes);
app.use("/api/wallet", walletRoutes);
app.use("/api/autopay", autopayRoutes);
app.use("/api/staff-task", staffTaskRoutes);

app.get("/", (req: CustomRequest, res: Response) => {
  res.send("Hey! You got hacked!");
});


connectRedis();

app.listen(process.env.PORT || 8080, () => {
  console.log(`Server is running on port ${process.env.PORT || 8080}`);
});

// const PORT = process.env.PORT || 8080;

// const server = app.listen(PORT, () => {
//   console.log(`Server is running on port ${PORT}`);

//   if (typeof process.send === 'function') {
//     process.send('ready');
//   }
// });

// function gracefulShutdown(signal: string) {
//   console.log(`Received ${signal}. Cleaning up and draining active requests...`);

//   server.close(() => {
//     console.log('All active requests completed safely. Server shutting down.');
//     process.exit(0);
//   });

//   setTimeout(() => {
//     console.error('Forcing shutdown: Active requests took too long to finish.');
//     process.exit(1);
//   }, 15000);
// }

// process.on('SIGINT', () => gracefulShutdown('SIGINT'));
// process.on('SIGTERM', () => gracefulShutdown('SIGTERM'));