import { Response } from 'express';
import { prisma } from '../config/database';
import { AuthRequest } from '../middleware/auth';

// WhatsApp counterpart of emailAutomation. Independent master gates so an
// owner can enable WhatsApp for some touchpoints, email for others, or both.
// Owner-only edit; the row is created lazily on first GET so existing
// workspaces don't need a backfill migration.
async function ensureRow(ownerId: string) {
  return prisma.whatsAppAutomation.upsert({
    where: { ownerId },
    create: { ownerId },
    update: {},
  });
}

// Read-only WhatsApp toggle flags for ANY authenticated workspace member
// (owner / admin / approver). Unlike getWhatsAppAutomation (owner-only edit
// surface), this just exposes the on/off booleans so the visitor UI can
// enable/disable the WhatsApp + Email share actions per template toggle.
export async function getWhatsAppFlags(req: AuthRequest, res: Response): Promise<void> {
  try {
    const row = await prisma.whatsAppAutomation.findUnique({ where: { ownerId: req.ownerId! } });
    res.json({
      inviteEnabled: !!row?.inviteEnabled,
      checkInEnabled: !!row?.checkInEnabled,
      reminderEnabled: !!row?.reminderEnabled,
      approverRequestEnabled: !!row?.approverRequestEnabled,
    });
  } catch (e) {
    console.error('getWhatsAppFlags', e);
    res.status(500).json({ error: 'Failed to load WhatsApp flags' });
  }
}

export async function getWhatsAppAutomation(req: AuthRequest, res: Response): Promise<void> {
  try {
    if (req.adminId) {
      res.status(403).json({ error: 'Workspace owner only' });
      return;
    }
    const row = await ensureRow(req.ownerId!);
    res.json(row);
  } catch (e) {
    console.error('getWhatsAppAutomation', e);
    res.status(500).json({ error: 'Failed to load WhatsApp automation' });
  }
}

export async function updateWhatsAppAutomation(req: AuthRequest, res: Response): Promise<void> {
  try {
    if (req.adminId) {
      res.status(403).json({ error: 'Workspace owner only' });
      return;
    }
    const { inviteEnabled, checkInEnabled, reminderEnabled, approverRequestEnabled } = req.body;
    const data: any = {};
    if (inviteEnabled !== undefined) data.inviteEnabled = !!inviteEnabled;
    if (checkInEnabled !== undefined) data.checkInEnabled = !!checkInEnabled;
    if (reminderEnabled !== undefined) data.reminderEnabled = !!reminderEnabled;
    if (approverRequestEnabled !== undefined) data.approverRequestEnabled = !!approverRequestEnabled;
    if (Object.keys(data).length === 0) {
      res.status(400).json({ error: 'No fields to update' });
      return;
    }
    await ensureRow(req.ownerId!);
    const row = await prisma.whatsAppAutomation.update({
      where: { ownerId: req.ownerId! },
      data,
    });
    res.json(row);
  } catch (e) {
    console.error('updateWhatsAppAutomation', e);
    res.status(500).json({ error: 'Failed to update WhatsApp automation' });
  }
}
