#!/usr/bin/env bash
set -euo pipefail

# CloudSigma AI Mission Control setup for Codex CLI and Desktop app-server.
# The native provider endpoint is https://taas.cloudsigma.com/v1/codex and
# uses the Responses wire API shared by the CLI and Desktop app-server.
# Review this file before running it. It only changes local Codex files.
TAAS_BASE_URL="${TAAS_BASE_URL:-https://taas.cloudsigma.com}"
MODEL="${TAAS_CODEX_MODEL:-gpt-6-luna}"
CODEX_HOME="${CODEX_HOME:-$HOME/.codex}"
CONFIG="$CODEX_HOME/config.toml"
KEY_FILE="${TAAS_CODEX_KEY_FILE:-$CODEX_HOME/taas-api-key}"
mkdir -p "$CODEX_HOME"
chmod 700 "$CODEX_HOME"

if [[ -z "${TAAS_API_KEY:-}" ]]; then
  [[ -r /dev/tty ]] || { echo "A terminal is required for hidden key input." >&2; exit 2; }
  read -r -s -p "CloudSigma AI Mission Control API key: " TAAS_API_KEY < /dev/tty
  printf '\n'
fi
[[ -n "$TAAS_API_KEY" ]] || { echo "An API key is required." >&2; exit 1; }

umask 077
printf '%s' "$TAAS_API_KEY" > "$KEY_FILE"
chmod 600 "$KEY_FILE"

MODELS_JSON="$(curl --fail --silent --show-error --retry 2 \
  -H "Authorization: Bearer $TAAS_API_KEY" \
  "$TAAS_BASE_URL/v1/models")"
echo "Available CloudSigma models:"
printf '%s' "$MODELS_JSON" | python3 -c 'import json,sys; data=json.load(sys.stdin); print("\n".join(str(row.get("id")) for row in data.get("data",[]) if row.get("id")))'
read -r -p "Default model [$MODEL]: " MODEL_INPUT
MODEL="${MODEL_INPUT:-$MODEL}"

if [[ -f "$CONFIG" ]]; then
  cp -p "$CONFIG" "$CONFIG.taas-backup.$(date +%Y%m%d%H%M%S)"
fi

python3 - "$CONFIG" "$KEY_FILE" "$MODEL" "$TAAS_BASE_URL/v1/codex" <<'PY'
import json
import pathlib
import re
import sys

config, key_file, model, base_url = map(str, sys.argv[1:])
path = pathlib.Path(config)
lines = path.read_text().splitlines() if path.exists() else []
kept, section = [], None
for line in lines:
    header = re.match(r"^\s*\[([^]]+)\]", line)
    if header:
        section = header.group(1).strip()
    if section in ("model_providers.cloudsigma", "model_providers.cloudsigma.auth"):
        continue
    if section is None and re.match(r"^\s*(model_provider|model)\s*=", line):
        continue
    kept.append(line)
while kept and not kept[-1].strip():
    kept.pop()

def toml_string(value):
    return json.dumps(value, ensure_ascii=False)

prefix = [
    'model_provider = "cloudsigma"',
    f'model = {toml_string(model)}',
    "",
    "[model_providers.cloudsigma]",
    'name = "CloudSigma AI Mission Control"',
    f'base_url = {toml_string(base_url)}',
    'wire_api = "responses"',
    'supports_websockets = false',
    "",
    "[model_providers.cloudsigma.auth]",
    'command = "/bin/cat"',
    f'args = [{toml_string(key_file)}]',
    "",
]
path.write_text("\n".join(prefix + kept))
PY

echo "Codex CLI and Desktop now use CloudSigma AI Mission Control."
echo "The existing config was backed up as $CONFIG.taas-backup.* when present."
echo "Start a new Codex task or restart Desktop, then run a short verification task."
