// /config/config.js const dotenv = require('dotenv'); const path = require('path'); dotenv.config({ path: path.resolve(process.cwd(), '.env') }); const parseBool = (value, defaultValue) => { if (value === undefined || value === null || String(value).trim() === '') { return defaultValue; } const normalized = String(value).trim().toLowerCase(); if (['true', '1', 'yes', 'on'].includes(normalized)) return true; if (['false', '0', 'no', 'off'].includes(normalized)) return false; return defaultValue; }; const config = { NODE_ENV: process.env.NODE_ENV || 'development', PORT: parseInt(process.env.PORT, 10) || 3000, MONGO_URI: process.env.MONGO_URI || 'mongodb://localhost:27017/teaching_institution_db', JWT_ACCESS_SECRET: process.env.JWT_ACCESS_SECRET || 'default_super_secret_access_key_change_in_production', JWT_REFRESH_SECRET: process.env.JWT_REFRESH_SECRET || 'default_super_secret_refresh_key_change_in_production', JWT_ACCESS_EXPIRES_IN: process.env.JWT_ACCESS_EXPIRES_IN || '15m', JWT_REFRESH_EXPIRES_IN: process.env.JWT_REFRESH_EXPIRES_IN || '7d', CORS_ORIGIN: process.env.CORS_ORIGIN || '*', DEFAULT_LANG: process.env.DEFAULT_LANG || 'en', UPLOAD_PATH: process.env.UPLOAD_PATH || 'uploads', // S3 / MinIO Object Storage Settings S3_ENDPOINT: process.env.S3_ENDPOINT || 'http://localhost:9000', S3_REGION: process.env.S3_REGION || 'us-east-1', S3_ACCESS_KEY: process.env.S3_ACCESS_KEY || 'minioadmin', S3_SECRET_KEY: process.env.S3_SECRET_KEY || 'minioadmin', S3_TEMP_BUCKET: process.env.S3_TEMP_BUCKET || 'gameno-temp', S3_STORAGE_BUCKET: process.env.S3_STORAGE_BUCKET || 'gameno-storage', S3_FORCE_PATH_STYLE: process.env.S3_FORCE_PATH_STYLE === 'false' ? false : true, SIGNED_URL_EXPIRES_IN: parseInt(process.env.SIGNED_URL_EXPIRES_IN, 10) || 900, // 15 minutes default // SMTP Email Settings SMTP_HOST: process.env.SMTP_HOST || 'smtp.mailtrap.io', SMTP_PORT: parseInt(process.env.SMTP_PORT, 10) || 2525, SMTP_USER: process.env.SMTP_USER || '', SMTP_PASS: process.env.SMTP_PASS || '', EMAIL_FROM: process.env.EMAIL_FROM || 'no-reply@institution.com', // SMS Provider Settings (sms.ir) SMS_ENABLED: process.env.SMS_ENABLED || 'false', SMS_PANEL_TOKEN: process.env.SMS_PANEL_TOKEN || process.env.SMS_API_KEY || '', SMS_API_KEY: process.env.SMS_PANEL_TOKEN || process.env.SMS_API_KEY || 'mock_sms_key', SMS_SENDER_NUMBER: process.env.SMS_SENDER_NUMBER || '10001000', // Template IDs configured in the sms.ir panel SMS_TEMPLATE_ACCOUNT_CREATED: process.env.SMS_TEMPLATE_ACCOUNT_CREATED || '', SMS_TEMPLATE_CLASS_REGISTERED: process.env.SMS_TEMPLATE_CLASS_REGISTERED || '', SMS_TEMPLATE_CLASS_REMINDER: process.env.SMS_TEMPLATE_CLASS_REMINDER || '', // Bale Messenger Bot Settings BALE_BOT_TOKEN: process.env.BALE_BOT_TOKEN || 'mock_bale_bot_token', // SuperAdmin bootstrap (credentials come from env only; no hardcoded secrets) SUPERADMIN_ENABLED: parseBool(process.env.SUPERADMIN_ENABLED, true), SUPERADMIN_USERNAME: process.env.SUPERADMIN_USERNAME || '', SUPERADMIN_PASSWORD: process.env.SUPERADMIN_PASSWORD || '', SUPERADMIN_EMAIL: process.env.SUPERADMIN_EMAIL || '', SUPERADMIN_NATIONAL_ID: process.env.SUPERADMIN_NATIONAL_ID || '0000000000', SUPERADMIN_PHONE: process.env.SUPERADMIN_PHONE || '09000000000' }; module.exports = config;