# Rename a campaign and change its concurrency with If-Match. Python 3.9+ with requests.
import os
import sys

import requests

base = os.environ.get("RELATIONSAI_API_BASE", "https://voice-api.relationsai.com/v1")
campaign_id = os.environ.get("CAMPAIGN_ID") or sys.exit("Set CAMPAIGN_ID to a campaign id (cmp_...)")
auth = {"Authorization": f"Bearer {os.environ['RELATIONSAI_API_KEY']}"}


def fail(body):
    err = body["error"]
    sys.exit(f"{err['code']}: {err['message']} (request {err['request_id']})")


read = requests.get(f"{base}/campaigns/{campaign_id}", headers=auth, timeout=30)
campaign = read.json()
if not read.ok:
    fail(campaign)

r = requests.patch(
    f"{base}/campaigns/{campaign_id}",
    headers={**auth, "If-Match": read.headers["ETag"]},
    json={"name": f"{campaign['name']} (edited)", "concurrency_limit": 3},
    timeout=30,
)
updated = r.json()
# 409 campaign_state_conflict: it is running (capabilities.update is false); pause or stop it first.
# 412 version_conflict: it changed since you read it. Read again and decide again.
if not r.ok:
    fail(updated)
print(f"{updated['id']} name=\"{updated['name']}\" concurrency_limit={updated['concurrency_limit']} (applies from the next start)")
