import 'dotenv/config';

export const configs = () => ({
  app: {
    name: process.env.APP_NAME ?? 'dummyProject',
    port: Number(process.env.PORT ?? 3000),
    env: process.env.NODE_ENV,
    url: process.env.APP_URL ?? 'http://localhost:3000',
  },
  auth: {
    jwtSecret: process.env.JWT_SECRET ?? 'fake-secret-domination',
    jwtExpiresIn: process.env.JWT_EXPIRES_IN ?? '7d',
  },
  database: {
    host: process.env.DB_HOST,
    port: Number(process.env.DB_PORT ?? 5432),
    username: process.env.DB_USER,
    password: process.env.DB_PASSWORD,
    name: process.env.DB_NAME,
  },
  redis: {
    host: process.env.REDIS_HOST,
    port: process.env.REDIS_PORT,
    password: process.env.REDIS_PASSWORD,
    db: process.env.REDIS_DB || 0,
    maxRetriesPerRequest: process.env.MAX_FAILED_JOBS_RETRY || 3,
  },
  mail: {
    fromAddress: process.env.GMAIL_FROM_ADDRESS ?? 'The Fur Finder',
    username: process.env.GMAIL_USERNAME ?? '',
    password: process.env.GMAIL_PASSWORD ?? '',
    host: process.env.GMAIL_HOST ?? 'smtp.gmail.com',
    port: Number(process.env.GMAIL_PORT ?? 465),
  },
  push: {
    accessToken: process.env.EXPO_ACCESS_TOKEN ?? '',
    expoPushUrl: process.env.EXPO_PUSH_URL ?? '',
    expoReceiptUrl: process.env.EXPO_RECEIPT_URL ?? '',
  },
  webhook: {
    discordWebhook: process.env.DISCORD_WEBHOOK ?? '',
    discordWebhookApp: process.env.DISCORD_WEBHOOK_APP ?? '',
    viberAuthToken: process.env.VIBER_AUTH_TOKEN ?? '',
  },
  invite: {
    androidTestUrl: process.env.ANDROID_TEST_INVITE_URL ?? '',
  },
});

export type AppConfig = ReturnType<typeof configs>;
