#!/usr/bin/env bash

# ============================================
# Static Context — resolved once at source time
# ============================================

_CTX_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
_CTX_WG="/etc/wireguard"
_CTX_CORE="${_CTX_ROOT}/core"
_CTX_MODULES="${_CTX_ROOT}/modules"
_CTX_COMMANDS="${_CTX_ROOT}/commands"
_CTX_CLIENTS="${_CTX_WG}/clients"
_CTX_DATA="${_CTX_WG}/.wgctl"

# ============================================
# Artifacts
# ============================================

_CTX_RULES="${_CTX_DATA}/rules"
_CTX_RULES_BASE="${_CTX_RULES}/base"
_CTX_GROUPS="${_CTX_DATA}/groups"
_CTX_BLOCKS="${_CTX_DATA}/blocks"
_CTX_META="${_CTX_DATA}/meta"
_CTX_IDENTITY="${_CTX_DATA}/identities"
_CTX_DAEMON="${_CTX_DATA}/daemon"
_CTX_NET="${_CTX_DATA}/services.json"

# ============================================

function ctx::root()            { echo "$_CTX_ROOT"; }
function ctx::core()            { echo "$_CTX_CORE"; }
function ctx::modules()         { echo "$_CTX_MODULES"; }
function ctx::commands()        { echo "$_CTX_COMMANDS"; }
function ctx::blocks()          { echo "$_CTX_BLOCKS"; }
function ctx::groups()          { echo "$_CTX_GROUPS"; }
function ctx::rules()           { echo "$_CTX_RULES"; }
function ctx::rules::base()     { echo "$_CTX_RULES_BASE"; }
function ctx::clients()         { echo "$_CTX_CLIENTS"; }
function ctx::wg()              { echo "$_CTX_WG"; }
function ctx::data()            { echo "$_CTX_DATA"; }
function ctx::rules()           { echo "$_CTX_RULES"; }
function ctx::groups()          { echo "$_CTX_GROUPS"; }
function ctx::blocks()          { echo "$_CTX_BLOCKS"; }
function ctx::meta()            { echo "$_CTX_META"; }
function ctx::daemon()          { echo "$_CTX_DAEMON"; }
function ctx::net()             { echo "$_CTX_NET"; }
function ctx::identities()      { echo "${_CTX_IDENTITY}"; }
function ctx::policies()        { echo "${_CTX_DATA}/policies.json"; }
function ctx::subnets()         { echo "${_CTX_DATA}/subnets.json"; }
function ctx::hosts()           { echo "${_CTX_DATA}/hosts.json"; }
function ctx::events_log()      { echo "$(ctx::daemon)/events.log"; }
function ctx::fw_events_log()   { echo "$(ctx::daemon)/fw_events.log"; }
function ctx::json_helper()     { echo "${_CTX_CORE}/json_helper.py"; }
function ctx::monitor_script()  { echo "${_CTX_ROOT}/daemon/wgctl-monitor.py"; }
function ctx::endpoint_cache()  { echo "${_CTX_DAEMON}/endpoint_cache.json"; }

# ============================================
# Path Helpers
# ============================================

function ctx::client::path() {
  local IFS="/"
  echo "$_CTX_CLIENTS/$*"
}

function ctx::meta::path() {
  local IFS="/"
  echo "$_CTX_META/$*"
}

function ctx::identity::path() {
  local IFS="/"
  echo "$_CTX_IDENTITY/$*"
}

function ctx::block::path() {
  local IFS="/"
  echo "$_CTX_BLOCKS/$*"
}

function ctx::group::path() {
  local IFS="/"
  echo "$_CTX_GROUPS/$*"
}

function ctx::rule::path() {
  local IFS="/"
  echo "$_CTX_RULES/$*"
}