#!/bin/sh
# Master-Link API - Approve/reject pending peer
# POST /api/master-link/approve
# Auth: Local only (127.0.0.1 or LuCI session)

echo "Content-Type: application/json"
echo "Access-Control-Allow-Origin: *"
echo "Access-Control-Allow-Methods: POST, OPTIONS"
echo "Access-Control-Allow-Headers: Content-Type"
echo ""

# Handle CORS preflight
if [ "$REQUEST_METHOD" = "OPTIONS" ]; then
	exit 0
fi

if [ "$REQUEST_METHOD" != "POST" ]; then
	echo '{"error":"method_not_allowed"}'
	exit 0
fi

# Load library
. /usr/lib/secubox/master-link.sh >/dev/null 2>&1

# Auth check - local only
if ! ml_check_local_auth; then
	echo '{"error":"unauthorized","message":"Approval requires local access"}'
	exit 0
fi

# Read POST body
read -r input

fingerprint=$(echo "$input" | jsonfilter -e '@.fingerprint' 2>/dev/null)
action=$(echo "$input" | jsonfilter -e '@.action' 2>/dev/null)
reason=$(echo "$input" | jsonfilter -e '@.reason' 2>/dev/null)

if [ -z "$fingerprint" ] || [ -z "$action" ]; then
	echo '{"error":"missing_fields","required":["fingerprint","action"]}'
	exit 0
fi

case "$action" in
	approve)
		ml_join_approve "$fingerprint"
		;;
	reject)
		ml_join_reject "$fingerprint" "$reason"
		;;
	promote)
		ml_promote_to_submaster "$fingerprint"
		;;
	*)
		echo '{"error":"invalid_action","valid":["approve","reject","promote"]}'
		;;
esac
