// src/config/env.ts
// Copyright (C) 2025 DTP Technologies, LLC
// All Rights Reserved

import "dotenv/config";
import assert from "node:assert";

import path, { dirname } from "node:path";
import fs from "node:fs";
import { fileURLToPath } from "node:url";
const __dirname = dirname(fileURLToPath(import.meta.url)); // jshint ignore:line

assert(
  process.env.TRIPWIRE_API_CLIENT_ID,
  "TRIPWIRE_API_CLIENT_ID is not defined"
);
assert(
  process.env.TRIPWIRE_API_CLIENT_SECRET,
  "TRIPWIRE_API_CLIENT_SECRET is not defined"
);

assert(
  process.env.TRIPWIRE_N8N_AUTH_TOKEN,
  "TRIPWIRE_N8N_AUTH_TOKEN is not defined"
);
assert(
  process.env.TRIPWIRE_N8N_EVENT_URL,
  "TRIPWIRE_N8N_EVENT_URL is not defined"
);
assert(
  process.env.TRIPWIRE_N8N_ERROR_URL,
  "TRIPWIRE_N8N_ERROR_URL is not defined"
);

import PackageJson from "../../package.json";

async function readJsonFile<T>(path: string): Promise<T> {
  const file = await fs.promises.readFile(path);
  return JSON.parse(file.toString("utf-8")) as T;
}

export const ROOT_DIR = path.resolve(__dirname, "..", "..");
export const SRC_DIR = path.resolve(__dirname, "..");

export default {
  NODE_ENV: process.env.NODE_ENV,
  root: ROOT_DIR,
  src: SRC_DIR,
  pkg: await readJsonFile<typeof PackageJson>(
    path.join(ROOT_DIR, "package.json")
  ),
  api: {
    url:
      process.env.TRIPWIRE_API_URL ||
      "https://tripwire.digitaltelepresence.com/api/v1",
    clientId: process.env.TRIPWIRE_API_CLIENT_ID,
    clientSecret: process.env.TRIPWIRE_API_CLIENT_SECRET,
  },
  cache: {
    path: path.join(ROOT_DIR, ".cache"),
  },
  n8n: {
    authToken: process.env.TRIPWIRE_N8N_AUTH_TOKEN,
    eventUrl: process.env.TRIPWIRE_N8N_EVENT_URL,
    errorUrl: process.env.TRIPWIRE_N8N_ERROR_URL,
  },
  log: {
    enabled: process.env.TRIPWIRE_LOG === "enabled",
    levels: {
      debug: process.env.TRIPWIRE_LOG_DEBUG === "enabled",
      info: process.env.TRIPWIRE_LOG_INFO === "enabled",
      warn: process.env.TRIPWIRE_LOG_WARN === "enabled",
    },
  },
};
