#!/usr/bin/env bash
# Requires curl and Python 3. Set DEEPFAKEPOLICY_API_KEY; run: bash check-media.sh photo.jpg
set -euo pipefail
: "${DEEPFAKEPOLICY_API_KEY:?Set DEEPFAKEPOLICY_API_KEY}"
media_file="${1:?Pass a photo or video filename}"
api_origin='https://deepfakepolicy.com'
job_payload=$(python3 - "$media_file" "${2:-full}" <<'PY'
import json, mimetypes, pathlib, sys
p = pathlib.Path(sys.argv[1])
video = p.suffix.lower() in ('.mp4', '.mov', '.m4v')
tier = sys.argv[2]
if tier not in ('basic', 'full') or (video and tier == 'basic'): raise ValueError('Choose basic for photos or full for photos/videos.')
print(json.dumps({'serviceTier': tier, 'modality': 'video' if video else 'image', 'analysisMode': 'quick', 'source': {'name': p.name, 'contentType': mimetypes.guess_type(p.name)[0] or 'application/octet-stream', 'sizeBytes': p.stat().st_size}}))
PY
)
idempotency_key=$(python3 -c 'import uuid; print(uuid.uuid4())')
job=$(curl --silent --show-error --fail-with-body "$api_origin/v1/jobs" \
  -H "Authorization: Bearer $DEEPFAKEPOLICY_API_KEY" -H 'Content-Type: application/json' \
  -H "Idempotency-Key: $idempotency_key" --data "$job_payload")
job_id=$(python3 -c 'import json,sys; print(json.load(sys.stdin)["id"])' <<< "$job")
content_type=$(python3 -c 'import json,sys; print(json.load(sys.stdin)["source"]["contentType"])' <<< "$job_payload")
upload_path=$(python3 -c 'import json,sys; print(json.load(sys.stdin)["links"].get("upload", ""))' <<< "$job")
if [[ -n "$upload_path" ]]; then
  curl --silent --show-error --fail-with-body -X PUT "$api_origin$upload_path" \
    -H "Authorization: Bearer $DEEPFAKEPOLICY_API_KEY" -H "Content-Type: $content_type" --data-binary "@$media_file" >/dev/null
fi
for ((attempt=0; attempt<300; attempt++)); do
  result=$(curl --silent --show-error --fail-with-body "$api_origin/v1/jobs/$job_id" -H "Authorization: Bearer $DEEPFAKEPOLICY_API_KEY")
  status=$(python3 -c 'import json,sys; print(json.load(sys.stdin)["status"])' <<< "$result")
  case "$status" in
    completed) python3 -m json.tool <<< "$result"; exit 0 ;;
    failed|deleted|deletion_pending) python3 -m json.tool <<< "$result"; exit 1 ;;
  esac
  sleep 2
done
printf 'Still processing. Poll /v1/jobs/%s; do not create another job.\n' "$job_id" >&2
exit 1
