import "dotenv/config";
import express from "express";

import { BACKUP_AUTO_RESTORE, configCheck, SERVER_PORT } from "./env.defaults";
configCheck();

import { PermissionObject } from "./type/permissionTypes";
declare global {
  namespace Express {
    export interface Request {
      userId: string;
      username: string;
      isOwner: boolean;
      permissions: PermissionObject;
      isPWA: boolean;
      isWebApiRequest: boolean;
    }
  }
}

import { dataSource } from "./data-source";
import BackupHelper from "./helpers/backupHelper";
dataSource.initialize().then(async () => {
  if ((BACKUP_AUTO_RESTORE as "true" | "false") == "true" && (await dataSource.createQueryRunner().hasTable("user"))) {
    await BackupHelper.autoRestoreBackup().catch((err) => {
      console.log(`${new Date().toISOString()}: failed auto-restoring database`);
    });
  }
});

const app = express();
import router from "./routes/index";
router(app);
app.listen(process.env.NODE_ENV ? SERVER_PORT : 5000, () => {
  console.log(`${new Date().toISOString()}: listening on port ${process.env.NODE_ENV ? SERVER_PORT : 5000}`);
});

import schedule from "node-schedule";
import RefreshCommandHandler from "./command/refreshCommandHandler";
const job = schedule.scheduleJob("0 0 * * *", async () => {
  console.log(`${new Date().toISOString()}: running Cron`);
  await RefreshCommandHandler.deleteExpired();
});