const PlatformPaymentConfig = require('../models/PlatformPaymentConfig'); const { success, error } = require('../utils/response'); const { encryptObject, encryptString, decryptObject, decryptString } = require('../utils/paymentCrypto'); const { maskKeyId } = require('../services/payments/maskCredentials'); const getPlatformPaymentConfig = async (request, h) => { if (request.auth.credentials.user.role !== 'super_admin') { return h.response(error('FORBIDDEN', 'Only super administrators can view platform payment settings')).code(403); } let doc = await PlatformPaymentConfig.findOne({ key: 'default' }); if (!doc) { doc = await PlatformPaymentConfig.create({ key: 'default' }); } const out = doc.toObject(); const webhookConfigured = Boolean(doc.webhookSecretEnc && String(doc.webhookSecretEnc).length > 4); let cred = {}; try { if (out.razorpayCredentialsEnc) cred = decryptObject(out.razorpayCredentialsEnc); } catch { cred = {}; } delete out.razorpayCredentialsEnc; delete out.webhookSecretEnc; out.razorpayKeyIdMasked = cred.keyId ? maskKeyId(cred.keyId) : ''; out.webhookConfigured = webhookConfigured; return h.response(success(out)); }; const updatePlatformPaymentConfig = async (request, h) => { if (request.auth.credentials.user.role !== 'super_admin') { return h.response(error('FORBIDDEN', 'Only super administrators can update platform payment settings')).code(403); } let doc = await PlatformPaymentConfig.findOne({ key: 'default' }); if (!doc) doc = await PlatformPaymentConfig.create({ key: 'default' }); const p = request.payload; if (p.enabled != null) doc.enabled = Boolean(p.enabled); if (p.testMode != null) doc.testMode = Boolean(p.testMode); if (p.defaultCommissionBps != null) doc.defaultCommissionBps = Number(p.defaultCommissionBps); if (p.razorpayKeyId != null || p.razorpayKeySecret != null) { let cur = {}; try { if (doc.razorpayCredentialsEnc) cur = decryptObject(doc.razorpayCredentialsEnc); } catch { cur = {}; } const next = { ...cur }; if (p.razorpayKeyId != null) next.keyId = String(p.razorpayKeyId).trim(); if (p.razorpayKeySecret != null && String(p.razorpayKeySecret).length > 0) { next.keySecret = String(p.razorpayKeySecret).trim(); } if (next.keyId && next.keySecret) { doc.razorpayCredentialsEnc = encryptObject(next); } } if (p.webhookSecret != null && String(p.webhookSecret).trim().length > 0) { doc.webhookSecretEnc = encryptString(String(p.webhookSecret).trim()); } await doc.save(); return getPlatformPaymentConfig(request, h); }; module.exports = { getPlatformPaymentConfig, updatePlatformPaymentConfig };