import "dotenv/config";
import "reflect-metadata";
import { DataSource } from "typeorm";
import { DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME, DB_TYPE, DB_PORT } from "./env.defaults";

import { user } from "./entity/management/user";
import { refresh } from "./entity/refresh";
import { invite } from "./entity/management/invite";
import { userPermission } from "./entity/management/user_permission";
import { role } from "./entity/management/role";
import { rolePermission } from "./entity/management/role_permission";
import { force } from "./entity/configuration/force";
import { reset } from "./entity/reset";

import { CreateSchema1739697068682 } from "./migrations/1739697068682-CreateSchema";
import { vehicle } from "./entity/configuration/vehicle";
import { equipment } from "./entity/configuration/equipment";
import { mission } from "./entity/operation/mission";

const dataSource = new DataSource({
  type: DB_TYPE as any,
  host: DB_HOST,
  port: DB_PORT,
  username: DB_USERNAME,
  password: DB_PASSWORD,
  database: DB_NAME,
  synchronize: false,
  logging: process.env.NODE_ENV ? true : ["schema", "error", "warn", "log", "migration"],
  bigNumberStrings: false,
  entities: [user, refresh, invite, reset, userPermission, role, rolePermission, force, vehicle, equipment, mission],
  migrations: [CreateSchema1739697068682],
  migrationsRun: true,
  migrationsTransactionMode: "each",
  subscribers: [],
});

export { dataSource };