# ---- Server ----
NODE_ENV=production
HOST=0.0.0.0
PORT=5055
LOG_LEVEL=info
# Set true when running behind a reverse proxy / load balancer (so req.ip and rate limits use X-Forwarded-For)
TRUST_PROXY=false
# Comma-separated browser origins allowed by CORS (admin panel). Mobile apps send no Origin and are always allowed.
CORS_ORIGINS=https://chat.vastuengineer.in,https://chatapi.vastuengineer.in

# ---- Auth (REQUIRED) ----
# Generate: node -e "console.log(require('crypto').randomBytes(48).toString('hex'))"   (min 32 chars in production)
JWT_SECRET=fe7a30ae3271f927d7c7d4086db02516d7c4470bc203e99f1534c78d7bb7804ebd5ba7c0b8f66b36e26325da0c1a4c88
JWT_ADMIN_EXPIRES_IN=8h
JWT_DEVICE_EXPIRES_IN=30d
BCRYPT_ROUNDS=10

# ---- Default super admin (used by `npm run seed`) ----
SEED_ADMIN_NAME=Super Admin
SEED_ADMIN_EMAIL=admin@vastu.local
SEED_ADMIN_PASSWORD=Admin@12345

# ---- MySQL ----
DB_HOST=192.46.213.224
DB_PORT=3306
DB_USER=chat_vastuengineer
DB_PASSWORD=-Wc4jyWos*YUw@sH
DB_NAME=chat_vastuengineer
DB_POOL_SIZE=10

# ---- Qdrant ----
QDRANT_URL=http://127.0.0.1:6333
QDRANT_API_KEY=
QDRANT_COLLECTION=vastu_knowledge

# ---- OpenAI (key stays on the server; never ship it in the mobile app) ----
OPENAI_API_KEY=AQ.Ab8RN6I9vDUSZSSqWhk0VhaAFa-ePtFSgIYQv1lpse3_msUTQQ
# OPENAI_CHAT_MODEL=gemini-3.5-flash
# OPENAI_EMBEDDING_MODEL=gemini-embedding-001
# Only set when the embedding model needs a non-default size (text-embedding-3-small = 1536 by default).
# The Qdrant collection is created with this size; changing it requires `npm run reindex -- --recreate`.
# OPENAI_EMBEDDING_DIMENSIONS=1536
OPENAI_TIMEOUT_MS=20000
OPENAI_MAX_RETRIES=3
OPENAI_RETRY_BASE_DELAY_MS=500
# Some newer models reject a custom temperature: set to "none" to omit it (auto-detected too).
# OPENAI_TEMPERATURE=none
OPENAI_CHAT_MAX_TOKENS=900
# Optional: OpenAI-compatible gateway
# OPENAI_BASE_URL=
# USD per 1M tokens, used for the dashboard cost ESTIMATE only
OPENAI_PRICE_CHAT_INPUT_PER_1M=0.15
OPENAI_PRICE_CHAT_OUTPUT_PER_1M=0.6
OPENAI_PRICE_EMBEDDING_PER_1M=0.02

# ---- Rate limits (requests per minute) ----
RATE_LIMIT_ENABLED=true
RATE_LIMIT_GLOBAL=100
RATE_LIMIT_LOGIN=5
RATE_LIMIT_DEVICE=10
RATE_LIMIT_CHAT=20
RATE_LIMIT_ADMIN=300

# ---- Uploads ----
UPLOAD_DIR=./uploads
MAX_UPLOAD_MB=50
IMPORT_MAX_MB=10
IMPORT_MAX_ROWS=5000

# ---- In-process worker (polls MySQL; no Redis). Enable on exactly ONE API instance. ----
WORKER_ENABLED=true
WORKER_POLL_MS=3000
EMBED_BATCH_SIZE=64
CHUNK_TOKENS=300
CHUNK_OVERLAP_TOKENS=50
WORKER_SHUTDOWN_GRACE_MS=15000

# ---- Caches ----
EMBED_CACHE_TTL_MS=600000
EMBED_CACHE_MAX=1000
SETTINGS_CACHE_TTL_MS=15000

# OPENAI_BASE_URL=https://generativelanguage.googleapis.com/v1beta/openai/
# EMBEDDING_VECTOR_SIZE=3072
# OPENAI_REASONING_EFFORT=low
# OPENAI_REWRITE_MODEL=gemini-3.5-flash-lite

# ---- FREE retrieval-only chatbot (no LLM, no paid API): answers are the stored Q&A text ----
CHAT_MODE=direct
EMBEDDING_PROVIDER=local
LOCAL_EMBEDDING_MODEL=Xenova/multilingual-e5-base
LOCAL_EMBEDDING_DTYPE=q8
LOCAL_EMBEDDING_DIMENSIONS=768
