import { describe, it, expect } from 'vitest'
import {
  COT_AUTH_TIMEOUT_MS,
  LIVE_SESSION_TTL_MS,
  COT_TTL_MS,
  COT_ENTITY_TTL_MS,
  COT_OSINT_TTL_MS,
  COT_PRUNE_INTERVAL_MS,
  POLL_INTERVAL_MS,
  SHUTDOWN_TIMEOUT_MS,
  COT_PORT,
  WEBSOCKET_PATH,
  MAX_PAYLOAD_BYTES,
  MAX_STRING_LENGTH,
  MAX_IDENTIFIER_LENGTH,
  MEDIASOUP_RTC_MIN_PORT,
  MEDIASOUP_RTC_MAX_PORT,
} from '../../server/utils/constants.js'

describe('constants', () => {
  it('uses default values when env vars not set', () => {
    expect(COT_AUTH_TIMEOUT_MS).toBe(15000)
    expect(LIVE_SESSION_TTL_MS).toBe(60000)
    expect(COT_TTL_MS).toBe(90000)
    expect(COT_ENTITY_TTL_MS).toBe(90000)
    expect(COT_OSINT_TTL_MS).toBe(30000)
    expect(COT_PRUNE_INTERVAL_MS).toBe(15000)
    expect(POLL_INTERVAL_MS).toBe(1500)
    expect(SHUTDOWN_TIMEOUT_MS).toBe(30000)
    expect(COT_PORT).toBe(8089)
    expect(WEBSOCKET_PATH).toBe('/ws')
    expect(MAX_PAYLOAD_BYTES).toBe(64 * 1024)
    expect(MAX_STRING_LENGTH).toBe(1000)
    expect(MAX_IDENTIFIER_LENGTH).toBe(255)
    expect(MEDIASOUP_RTC_MIN_PORT).toBe(40000)
    expect(MEDIASOUP_RTC_MAX_PORT).toBe(49999)
  })

  it('handles invalid env var values gracefully', () => {
    // Constants are evaluated at module load time, so env vars set in tests won't affect them
    // This test verifies the pattern: Number(process.env.VAR) || default
    const invalidValue = Number('invalid')
    expect(Number.isNaN(invalidValue)).toBe(true)
    expect(invalidValue || 15000).toBe(15000)
  })
})
