/**
 * WhatsApp Auth Routes (Super Admin → Settings)
 *
 * Platform-wide WhatsApp Business API (Meta Cloud API) credential management — super-admin only:
 * - GET    /config     → Credential status (masked, never the secrets)
 * - POST   /config     → Save the platform WhatsApp App ID/Secret (encrypted) [super admin]
 * - DELETE /config     → Remove the saved credentials [super admin]
 *
 * Follows the same pattern as metaAdsAuth / facebookAuth routes.
 */

import express, { Request, Response } from 'express';
import { authenticate, requireRole } from '../middleware/auth';
import {
  getCredentialStatus,
  saveWhatsAppCredentials,
  deleteWhatsAppCredentials,
} from '../services/whatsapp/whatsappAuth';

const router = express.Router();

// ============================================
// CONFIG — platform-wide WhatsApp Business API credentials
// ============================================

router.get('/config', authenticate, async (_req: Request, res: Response) => {
  try {
    const status = await getCredentialStatus();
    res.json(status);
  } catch (error) {
    console.error('WhatsApp config status error:', error);
    res.status(500).json({ error: 'Failed to load WhatsApp API settings' });
  }
});

router.post('/config', authenticate, requireRole('super-admin'), async (req: Request, res: Response) => {
  try {
    const userId = req.user!._id.toString();
    const { appId, appSecret, webhookVerifyToken, webhookBaseUrl, embeddedSignupConfigId, graphVersion, businessManagerId } = req.body;
    const result = await saveWhatsAppCredentials(userId, { appId, appSecret, webhookVerifyToken, webhookBaseUrl, embeddedSignupConfigId, graphVersion, businessManagerId });

    if (!result.success) {
      return res.status(400).json({ error: result.error });
    }

    const status = await getCredentialStatus();
    res.json({ message: 'WhatsApp API settings saved', ...status });
  } catch (error) {
    console.error('WhatsApp config save error:', error);
    res.status(500).json({ error: 'Failed to save WhatsApp API settings' });
  }
});

router.delete('/config', authenticate, requireRole('super-admin'), async (_req: Request, res: Response) => {
  try {
    await deleteWhatsAppCredentials();
    const status = await getCredentialStatus();
    res.json({ message: 'WhatsApp API settings removed', ...status });
  } catch (error) {
    console.error('WhatsApp config delete error:', error);
    res.status(500).json({ error: 'Failed to remove WhatsApp API settings' });
  }
});

export default router;