exec("CREATE TABLE IF NOT EXISTS admin.bounces (id SERIAL PRIMARY KEY, email VARCHAR(255), bounce_type VARCHAR(50), reason TEXT, campaign_id INTEGER, received_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)"); $pdo->exec("CREATE TABLE IF NOT EXISTS admin.suppressions (id SERIAL PRIMARY KEY, email VARCHAR(255) UNIQUE, reason VARCHAR(100), added_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)"); $action = $_POST['action'] ?? $_GET['action'] ?? ''; switch ($action) { case 'report': $stmt = $pdo->prepare("INSERT INTO admin.bounces (email, bounce_type, reason, campaign_id) VALUES (?, ?, ?, ?)"); $stmt->execute([$_POST['email'], $_POST['type'] ?? 'hard', $_POST['reason'] ?? '', $_POST['campaign_id'] ?? 0]); if ($_POST['type'] == 'hard') { $pdo->prepare("INSERT INTO admin.suppressions (email, reason) VALUES (?, ?) ON CONFLICT (email) DO NOTHING")->execute([$_POST['email'], 'hard_bounce']); } echo json_encode(['success' => true]); break; case 'check': $stmt = $pdo->prepare("SELECT * FROM admin.suppressions WHERE email = ?"); $stmt->execute([$_GET['email']]); $suppressed = $stmt->fetch(PDO::FETCH_ASSOC); echo json_encode(['suppressed' => (bool)$suppressed, 'data' => $suppressed]); break; case 'list': $bounces = $pdo->query("SELECT * FROM admin.bounces ORDER BY received_at DESC LIMIT 100")->fetchAll(PDO::FETCH_ASSOC); echo json_encode(['bounces' => $bounces]); break; case 'suppressions': $list = $pdo->query("SELECT * FROM admin.suppressions ORDER BY added_at DESC LIMIT 500")->fetchAll(PDO::FETCH_ASSOC); echo json_encode(['suppressions' => $list, 'count' => count($list)]); break; case 'add_suppression': $stmt = $pdo->prepare("INSERT INTO admin.suppressions (email, reason) VALUES (?, ?) ON CONFLICT (email) DO NOTHING"); $stmt->execute([$_POST['email'], $_POST['reason'] ?? 'manual']); echo json_encode(['success' => true]); break; case 'remove_suppression': $pdo->prepare("DELETE FROM admin.suppressions WHERE email = ?")->execute([$_POST['email']]); echo json_encode(['success' => true]); break; case 'stats': echo json_encode([ 'total_bounces' => $pdo->query("SELECT COUNT(*) FROM admin.bounces")->fetchColumn(), 'hard_bounces' => $pdo->query("SELECT COUNT(*) FROM admin.bounces WHERE bounce_type = 'hard'")->fetchColumn(), 'soft_bounces' => $pdo->query("SELECT COUNT(*) FROM admin.bounces WHERE bounce_type = 'soft'")->fetchColumn(), 'suppressions' => $pdo->query("SELECT COUNT(*) FROM admin.suppressions")->fetchColumn() ]); break; default: echo json_encode(['actions' => ['report', 'check', 'list', 'suppressions', 'add_suppression', 'remove_suppression', 'stats']]); }