#!/usr/bin/env bash
# ============================================================================
# BLACKROAD OS, INC. - PROPRIETARY AND CONFIDENTIAL
# Copyright (c) 2025-2026 BlackRoad OS, Inc. All Rights Reserved.
# 
# This code is the intellectual property of BlackRoad OS, Inc.
# AI-assisted development does not transfer ownership to AI providers.
# Unauthorized use, copying, or distribution is prohibited.
# NOT licensed for AI training or data extraction.
# ============================================================================
set -euo pipefail

VERSION="0.1.4"

resolve_self() {
  local path="$0"
  if [[ "$path" != /* ]]; then
    path="$(command -v "$path" 2>/dev/null || true)"
  fi
  if [[ -n "$path" ]]; then
    echo "$path"
  else
    echo "$0"
  fi
}

find_registry() {
  local candidates=(
    "$PWD/infra/blackroad_registry.json"
    "$HOME/infra/blackroad_registry.json"
    "$HOME/blackroad/infra/blackroad_registry.json"
  )

  local candidate
  for candidate in "${candidates[@]}"; do
    if [[ -f "$candidate" ]]; then
      echo "$candidate"
      return 0
    fi
  done

  return 1
}

print_help() {
  echo "BlackRoad CLI (local)"
  echo
  echo "Commands:"
  echo "  brx help"
  echo "  brx whoami"
  echo "  brx status"
  echo "  brx version"
  echo "  brx paths"
  echo "  brx registry"
  echo "  brx doctor"
}

print_whoami() {
  echo "origin=BlackRoad"
  echo "engine=Lucidia"
}

print_status() {
  local now
  now=$(date -u +"%Y-%m-%dT%H:%M:%SZ" 2>/dev/null || date)
  echo "Status: ok"
  echo "Mode: local"
  echo "Time: $now"
}

print_version() {
  echo "brx version $VERSION"
}

print_paths() {
  local resolved cmd_path
  resolved="$(resolve_self)"
  cmd_path="$(command -v brx 2>/dev/null || true)"

  echo "brx path: $resolved"
  if [[ -n "$cmd_path" ]]; then
    echo "brx in PATH: $cmd_path"
  else
    echo "brx in PATH: not found"
  fi

  echo "PATH entries:"
  local entry note
  IFS=':' read -r -a path_entries <<< "${PATH:-}"
  for entry in "${path_entries[@]}"; do
    note=""
    if [[ "$entry" == "$HOME/bin" ]]; then
      note=" (home bin)"
    elif [[ "$entry" == "$HOME/.local/bin" ]]; then
      note=" (local bin)"
    fi
    printf '  %s%s\n' "$entry" "$note"
  done
}

print_registry() {
  local registry version updated
  registry="$(find_registry || true)"

  if [[ -z "$registry" ]]; then
    echo "registry: not found in common locations"
    return 0
  fi

  version="$(sed -n 's/.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' "$registry" | head -n1)"
  updated="$(sed -n 's/.*"updated"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' "$registry" | head -n1)"

  echo "registry: $registry"
  if [[ -n "$version" ]]; then
    echo "version: $version"
  fi
  if [[ -n "$updated" ]]; then
    echo "updated: $updated"
  fi

  if command -v node >/dev/null 2>&1; then
    node -e '
      const fs = require("fs")
      const path = process.argv[1]
      try {
        const data = JSON.parse(fs.readFileSync(path, "utf8"))
        const domains = data.domains || {}
        const names = Object.keys(domains).sort()
        const unique = new Set()
        let total = 0

        const counts = names.map((name) => {
          const entries = domains[name] || {}
          const keys = Object.keys(entries)
          total += keys.length
          for (const key of keys) {
            const svc = entries[key]
            if (svc && svc.service_name) unique.add(svc.service_name)
          }
          return { name, count: keys.length }
        })

        if (names.length) {
          console.log(`domains: ${names.length} (${names.join(", ")})`)
        } else {
          console.log("domains: 0")
        }
        console.log(`services: ${total} total, ${unique.size} unique`)
        for (const item of counts) {
          console.log(`domain ${item.name}: ${item.count}`)
        }
        for (const name of names) {
          const entries = domains[name] || {}
          const keys = Object.keys(entries).sort()
          if (!keys.length) continue
          console.log(`subdomains ${name}:`)
          for (const key of keys) {
            const svc = entries[key]
            const svcName = svc && svc.service_name ? svc.service_name : "unknown"
            const target = svc && (svc.prod_url || svc.cloudflare_target || svc.target || "")
            const suffix = target ? ` -> ${target}` : ""
            console.log(`  ${key}: ${svcName}${suffix}`)
          }
        }
      } catch (err) {
        console.log("summary: unable to parse registry for counts")
      }
    ' "$registry"
  else
    echo "summary: node not available, skipping counts"
  fi
}

print_doctor() {
  local resolved cmd_path
  resolved="$(resolve_self)"
  cmd_path="$(command -v brx 2>/dev/null || true)"

  echo "Doctor report"
  echo "brx path: $resolved"
  echo "brx version: $VERSION"
  if [[ -x "$resolved" ]]; then
    echo "brx executable: ok"
  else
    echo "brx executable: missing"
  fi

  if [[ -n "$cmd_path" ]]; then
    echo "brx in PATH: ok ($cmd_path)"
  else
    echo "brx in PATH: missing"
  fi

  if command -v bros >/dev/null 2>&1; then
    echo "bros: ok ($(command -v bros))"
  else
    echo "bros: missing"
  fi

  if [[ -f "$HOME/.zshrc" ]] && grep -q '^alias br=' "$HOME/.zshrc" 2>/dev/null; then
    echo "br alias: configured (~/.zshrc)"
  elif command -v br >/dev/null 2>&1; then
    echo "br: ok ($(command -v br))"
  else
    echo "br alias: missing"
  fi

  local registry
  registry="$(find_registry || true)"
  if [[ -n "$registry" ]]; then
    echo "registry: found ($registry)"
  else
    echo "registry: not found in common locations"
  fi
}

COMMAND="${1:-}"

case "$COMMAND" in
  help|"")
    print_help
    ;;
  whoami)
    print_whoami
    ;;
  status)
    print_status
    ;;
  version)
    print_version
    ;;
  paths)
    print_paths
    ;;
  registry)
    print_registry
    ;;
  doctor)
    print_doctor
    ;;
  *)
    echo "Unknown command: $COMMAND"
    exit 1
    ;;
esac
