#!/usr/bin/env bash
#
# zone-list.sh — List Cloudflare zones (domains)
#
# Usage: zone-list.sh [-a instance] [-f format]
#
# Options:
#   -a instance   Cloudflare instance name (default: uses credentials default)
#   -f format     Output format: table (default), json
#   -h            Show this help
set -euo pipefail

MOSAIC_HOME="${MOSAIC_HOME:-$HOME/.config/mosaic}"
source "$MOSAIC_HOME/tools/_lib/credentials.sh"
source "$(dirname "$0")/_lib.sh"

INSTANCE=""
FORMAT="table"

while getopts "a:f:h" opt; do
  case $opt in
    a) INSTANCE="$OPTARG" ;;
    f) FORMAT="$OPTARG" ;;
    h) head -10 "$0" | grep "^#" | sed 's/^# \?//'; exit 0 ;;
    *) echo "Usage: $0 [-a instance] [-f format]" >&2; exit 1 ;;
  esac
done

cf_load_instance "$INSTANCE"

response=$(curl -s -w "\n%{http_code}" \
  -H "Authorization: $(cf_auth)" \
  -H "Content-Type: application/json" \
  "${CF_API}/zones?per_page=50")

http_code=$(echo "$response" | tail -n1)
body=$(echo "$response" | sed '$d')

if [[ "$http_code" != "200" ]]; then
  echo "Error: Failed to list zones (HTTP $http_code)" >&2
  echo "$body" | jq -r '.errors[]?.message // empty' 2>/dev/null >&2
  exit 1
fi

if [[ "$FORMAT" == "json" ]]; then
  echo "$body" | jq '.result'
  exit 0
fi

echo "ZONE ID                           NAME                          STATUS    PLAN"
echo "--------------------------------  ----------------------------  --------  ----------"
echo "$body" | jq -r '.result[] | [
  .id,
  .name,
  .status,
  .plan.name
] | @tsv' | while IFS=$'\t' read -r id name status plan; do
  printf "%-32s  %-28s  %-8s  %s\n" "$id" "$name" "$status" "$plan"
done
