#!/bin/bash
# ========== configure_remnanode.sh ==========
# Настройка RemnaNode под выбранную панель
# - создание профиля с 4 инбаундами
# - создание 4 хостов для каждого инбаунда
# - запуск контейнеров и проверка статуса

set -euo pipefail

# ────────────────────────────────────────────────
# ЛОГИРОВАНИЕ
# ────────────────────────────────────────────────
log_info() {
    echo "ℹ️  [INFO]  $(date '+%Y-%m-%d %H:%M:%S') - $1"
}
log_success() {
    echo "✅ [SUCCESS] $(date '+%Y-%m-%d %H:%M:%S') - $1"
}
log_warning() {
    echo "⚠️  [WARNING] $(date '+%Y-%m-%d %H:%M:%S') - $1"
}
log_error() {
    echo "❌ [ERROR]  $(date '+%Y-%m-%d %H:%M:%S') - $1" >&2
}
log_step() {
    echo ""
    echo "📋 [STEP] $(date '+%Y-%m-%d %H:%M:%S') - $1"
    echo "=================================================="
}

# ────────────────────────────────────────────────
# ПРОВЕРКИ
# ────────────────────────────────────────────────
[[ $EUID -ne 0 ]] && { log_error "Скрипт должен запускаться от root"; exit 1; }
[[ -z "${LOCATION:-}" ]] && { log_error "Переменная LOCATION не установлена"; exit 1; }
[[ -z "${SELECTED_PANEL_TOKEN:-}" ]] && { log_error "Переменная SELECTED_PANEL_TOKEN не установлена"; exit 1; }
[[ -z "${SELECTED_PANEL_NAME:-}" ]] && { log_error "Переменная SELECTED_PANEL_NAME не установлена"; exit 1; }
[[ -z "${SELECTED_PANEL_URL:-}" ]] && { 
    SELECTED_PANEL_URL="https://${SELECTED_PANEL_NAME}.4rp.su/api"
    log_warning "SELECTED_PANEL_URL не установлен, использую: $SELECTED_PANEL_URL"
}

log_info "Локация: $LOCATION"
log_info "Домен: ${LOCATION}.8rmdgz.ru"
log_info "Порт ноды: 9873"
log_info "Панель: ${SELECTED_PANEL_NAME}.4rp.su"
log_info "API URL: $SELECTED_PANEL_URL"

# ────────────────────────────────────────────────
# jq
# ────────────────────────────────────────────────
if ! command -v jq &>/dev/null; then
    log_warning "jq не найден → установка..."
    if command -v apt &>/dev/null; then
        apt update -qq && apt install -y -qq jq
    elif command -v dnf &>/dev/null; then
        dnf install -y -q jq
    else
        log_error "Не удалось установить jq"
        exit 1
    fi
    log_success "jq установлен"
fi

# ────────────────────────────────────────────────
# API ТОКЕН
# ────────────────────────────────────────────────
log_step "Настройка API-токена для панели ${SELECTED_PANEL_NAME}"

API_TOKEN="$SELECTED_PANEL_TOKEN"
API_URL="$SELECTED_PANEL_URL"

log_success "API-токен загружен для панели $SELECTED_PANEL_NAME (первые 20 символов: ${API_TOKEN:0:20}...)"

# ────────────────────────────────────────────────
# ПРОВЕРКА ТОКЕНА
# ────────────────────────────────────────────────
TEST_URL="${API_URL}/config-profiles"

log_step "Проверка токена на панели ${SELECTED_PANEL_NAME}"

response=$(curl -s -w "\n%{http_code}" -H "Authorization: Bearer $API_TOKEN" "$TEST_URL")
http_code=$(echo "$response" | tail -n1)
body=$(echo "$response" | sed '$d')

if [[ "$http_code" != "200" ]]; then
    log_error "Токен недействителен или API недоступно (HTTP $http_code)"
    log_error "Проверьте токен для панели $SELECTED_PANEL_NAME"
    [[ -n "$body" ]] && echo "Ответ API: $body"
    exit 1
fi
log_success "Токен валиден для панели $SELECTED_PANEL_NAME"

# ────────────────────────────────────────────────
# КОНФИГ ПРОФИЛЯ С 4 ИНБАУНДАМИ
# ────────────────────────────────────────────────
log_step "Подготовка конфигурации профиля с 4 инбаундами"

PROFILE_NAME=$(echo "$LOCATION" | tr '[:lower:]' '[:upper:]')

CONFIG_TEMPLATE=$(cat <<'EOF'
{
  "log": {
    "loglevel": "warning"
  },
  "dns": {
    "servers": [
      {
        "address": "https://dns.google/dns-query",
        "skipFallback": false
      }
    ],
    "queryStrategy": "UseIPv4"
  },
  "inbounds": [
    {
      "tag": "__LOCATION__-vless",
      "port": 443,
      "listen": "0.0.0.0",
      "protocol": "vless",
      "settings": {
        "clients": [],
        "decryption": "none"
      },
      "sniffing": {
        "enabled": true,
        "destOverride": ["http", "tls", "quic"]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "reality",
        "realitySettings": {
          "dest": "/dev/shm/nginx.sock",
          "show": false,
          "xver": 1,
          "spiderX": "",
          "shortIds": ["db26f16a110304de"],
          "privateKey": "GaBVi_Nk4IjUxHVob2kxSZlrUgFAW66sIPC9jLTCz_A",
          "serverNames": ["__LOCATION__.8rmdgz.ru"]
        }
      }
    },
    {
      "tag": "__LOCATION__-HS2",
      "port": 443,
      "listen": "0.0.0.0",
      "protocol": "hysteria",
      "settings": {
        "clients": [],
        "version": 2
      },
      "streamSettings": {
        "network": "hysteria",
        "security": "tls",
        "finalmask": {
          "quicParams": {
            "debug": false,
            "congestion": "bbr"
          }
        },
        "tlsSettings": {
          "alpn": ["h3"],
          "certificates": [
            {
              "keyFile": "/dev/shm/hysteria_key.pem",
              "certificateFile": "/dev/shm/hysteria_cert.pem"
            }
          ]
        },
        "hysteriaSettings": {
          "version": 2
        }
      }
    },
    {
      "tag": "__LOCATION__-gRPC",
      "port": 8443,
      "listen": "0.0.0.0",
      "protocol": "vless",
      "settings": {
        "clients": [],
        "decryption": "none"
      },
      "sniffing": {
        "enabled": true,
        "destOverride": ["http", "tls", "quic"]
      },
      "streamSettings": {
        "network": "grpc",
        "security": "reality",
        "grpcSettings": {
          "multiMode": false,
          "serviceName": "__LOCATION__grpc"
        },
        "realitySettings": {
          "dest": "www.apple.com:443",
          "show": false,
          "xver": 0,
          "spiderX": "",
          "shortIds": ["db26f16a110304de"],
          "privateKey": "GaBVi_Nk4IjUxHVob2kxSZlrUgFAW66sIPC9jLTCz_A",
          "serverNames": ["__LOCATION__.8rmdgz.ru"]
        }
      }
    },
    {
      "tag": "__LOCATION__-xHTTP",
      "port": 4443,
      "listen": "0.0.0.0",
      "protocol": "vless",
      "settings": {
        "clients": [],
        "decryption": "none"
      },
      "sniffing": {
        "enabled": true,
        "destOverride": ["http", "tls", "quic"]
      },
      "streamSettings": {
        "network": "xhttp",
        "security": "reality",
        "xhttpSettings": {
          "mode": "auto",
          "path": "/",
          "noGRPCHeader": false,
          "xPaddingBytes": "100-1000",
          "scMaxBufferedPosts": 30,
          "scMaxEachPostBytes": "1000000"
        },
        "realitySettings": {
          "dest": "www.apple.com:443",
          "show": false,
          "xver": 0,
          "spiderX": "",
          "shortIds": ["db26f16a110304de"],
          "privateKey": "GaBVi_Nk4IjUxHVob2kxSZlrUgFAW66sIPC9jLTCz_A",
          "serverNames": ["__LOCATION__.8rmdgz.ru"]
        }
      }
    }
  ],
  "outbounds": [
    { "tag": "DIRECT", "protocol": "freedom" },
    { "tag": "BLOCK", "protocol": "blackhole" }
  ],
  "routing": {
    "rules": [
      { "ip": ["geoip:private"], "type": "field", "outboundTag": "BLOCK" },
      { "type": "field", "protocol": ["bittorrent"], "outboundTag": "BLOCK" }
    ]
  }
}
EOF
)

FINAL_JSON=$(echo "$CONFIG_TEMPLATE" | sed "s/__LOCATION__/$LOCATION/g")
if ! echo "$FINAL_JSON" | jq . >/dev/null 2>&1; then
    log_error "Ошибка формирования JSON профиля"
    echo "$FINAL_JSON" | head -20
    exit 1
fi

# ────────────────────────────────────────────────
# СОЗДАНИЕ ПРОФИЛЯ
# ────────────────────────────────────────────────
log_step "Создание / получение профиля на панели ${SELECTED_PANEL_NAME}"

PROFILE_URL="${API_URL}/config-profiles"
CREATE_JSON=$(jq -n --arg name "$PROFILE_NAME" --argjson config "$FINAL_JSON" '{name: $name, config: $config}')

response=$(curl -s -w "\n%{http_code}" -X POST "$PROFILE_URL" \
    -H "Authorization: Bearer $API_TOKEN" \
    -H "Content-Type: application/json" \
    -d "$CREATE_JSON")

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

if [[ $http_code == 201 ]]; then
    PROFILE_UUID=$(echo "$body" | jq -r '.response.uuid // .uuid // ""')
    INBOUNDS_JSON=$(echo "$body" | jq -c '.response.inbounds // .inbounds // []')
    log_success "Профиль создан на панели $SELECTED_PANEL_NAME"
elif [[ $http_code == 409 ]]; then
    log_warning "Профиль уже существует на панели $SELECTED_PANEL_NAME"
    
    response=$(curl -s -w "\n%{http_code}" -X GET "$PROFILE_URL" -H "Authorization: Bearer $API_TOKEN")
    http_code=$(echo "$response" | tail -n1)
    body=$(echo "$response" | sed '$d')
    
    [[ $http_code != 200 ]] && { log_error "Не удалось получить список профилей (HTTP $http_code)"; exit 1; }
    
    PROFILE_UUID=$(echo "$body" | jq -r --arg n "$PROFILE_NAME" '.response.configProfiles[]? | select(.name==$n) | .uuid // ""')
    [[ -z "$PROFILE_UUID" ]] && { log_error "Не удалось найти UUID профиля с именем $PROFILE_NAME"; exit 1; }
    
    profile_response=$(curl -s -w "\n%{http_code}" -X GET "${PROFILE_URL}/${PROFILE_UUID}" -H "Authorization: Bearer $API_TOKEN")
    profile_http_code=$(echo "$profile_response" | tail -n1)
    profile_body=$(echo "$profile_response" | sed '$d')
    
    [[ $profile_http_code != 200 ]] && { log_error "Не удалось получить детали профиля (HTTP $profile_http_code)"; exit 1; }
    
    INBOUNDS_JSON=$(echo "$profile_body" | jq -c '.response.inbounds // []')
    log_success "UUID профиля: $PROFILE_UUID"
else
    log_error "Ошибка профиля (HTTP $http_code)"
    echo "$body" | jq . 2>/dev/null || echo "$body"
    exit 1
fi

# ────────────────────────────────────────────────
# ИЗВЛЕЧЕНИЕ UUID ИНБАУНДОВ
# ────────────────────────────────────────────────
log_step "Извлечение UUID инбаундов"

if [[ -z "$INBOUNDS_JSON" || "$INBOUNDS_JSON" == "null" ]]; then
    log_error "INBOUNDS_JSON пуст или null"
    exit 1
fi

# Маппинг тегов инбаундов
declare -A INBOUND_TAGS=(
    ["vless"]="__LOCATION__-vless"
    ["HS2"]="__LOCATION__-HS2"
    ["gRPC"]="__LOCATION__-gRPC"
    ["xHTTP"]="__LOCATION__-xHTTP"
)

declare -A INBOUND_UUIDS

for key in "${!INBOUND_TAGS[@]}"; do
    tag="${INBOUND_TAGS[$key]}"
    tag_fixed=$(echo "$tag" | sed "s/__LOCATION__/$LOCATION/g")
    uuid=$(echo "$INBOUNDS_JSON" | jq -r --arg t "$tag_fixed" '.[] | select(.tag==$t) | .uuid // ""')
    if [[ -z "$uuid" || "$uuid" == "null" ]]; then
        log_error "Не найден UUID для инбаунда с тегом: $tag_fixed"
        echo "Доступные инбаунды:"
        echo "$INBOUNDS_JSON" | jq -r '.[] | "\(.tag): \(.uuid)"'
        exit 1
    fi
    INBOUND_UUIDS["$key"]="$uuid"
    log_info "Найден UUID для $key: $uuid"
done

log_success "Все 4 UUID инбаундов извлечены"

# ────────────────────────────────────────────────
# IP И СТРАНА
# ────────────────────────────────────────────────
SERVER_IP=$(curl -s --connect-timeout 8 ifconfig.me 2>/dev/null || hostname -I 2>/dev/null | awk '{print $1}' || echo "")
[[ -z "$SERVER_IP" ]] && { log_error "Не удалось определить IP"; exit 1; }

COUNTRY_DATA=$(curl -s --connect-timeout 8 "http://ip-api.com/json/$SERVER_IP?fields=country,countryCode")
COUNTRY_CODE=$(echo "$COUNTRY_DATA" | jq -r '.countryCode // "XX"')
COUNTRY_NAME=$(echo "$COUNTRY_DATA" | jq -r '.country // ""')

# ────────────────────────────────────────────────
# ПРОВЕРКА СУЩЕСТВОВАНИЯ НОДЫ
# ────────────────────────────────────────────────
log_step "Проверка существования ноды"

NODE_NAME="${LOCATION}.8rmdgz.ru"
NODE_PORT=9873

nodes_response=$(curl -s -w "\n%{http_code}" -X GET "${API_URL}/nodes" \
    -H "Authorization: Bearer $API_TOKEN")

nodes_http_code=$(echo "$nodes_response" | tail -n1)
nodes_body=$(echo "$nodes_response" | sed '$d')

if [[ $nodes_http_code != 200 ]]; then
    log_error "Не удалось получить список нод (HTTP $nodes_http_code)"
    exit 1
fi

EXISTING_NODE_UUID=$(echo "$nodes_body" | jq -r --arg name "$NODE_NAME" '.response[]? | select(.name==$name) | .uuid // ""' 2>/dev/null)

if [[ -n "$EXISTING_NODE_UUID" && "$EXISTING_NODE_UUID" != "null" ]]; then
    log_warning "Нода с именем $NODE_NAME уже существует (UUID: $EXISTING_NODE_UUID)"
    NODE_UUID="$EXISTING_NODE_UUID"
    NODE_CREATED="false"
else
    NODE_CREATED="true"
fi

# ────────────────────────────────────────────────
# СОЗДАНИЕ НОДЫ
# ────────────────────────────────────────────────
if [[ "$NODE_CREATED" == "true" ]]; then
    log_step "Создание новой ноды на панели $SELECTED_PANEL_NAME"

    # Собираем все UUID инбаундов в массив
    INBOUND_ARRAY=$(echo "$INBOUNDS_JSON" | jq -r '[.[].uuid]')

    NODE_JSON=$(jq -n \
        --arg name "$NODE_NAME" \
        --arg addr "$SERVER_IP" \
        --argjson port "$NODE_PORT" \
        --arg puuid "$PROFILE_UUID" \
        --argjson inbs "$INBOUND_ARRAY" \
        --arg cc "${COUNTRY_CODE:-XX}" \
        '{
            name: $name,
            address: $addr,
            port: $port,
            countryCode: $cc,
            configProfile: { activeConfigProfileUuid: $puuid, activeInbounds: $inbs },
            isTrafficTrackingActive: false,
            consumptionMultiplier: 1.0
        }')

    response=$(curl -s -w "\n%{http_code}" -X POST "${API_URL}/nodes" \
        -H "Authorization: Bearer $API_TOKEN" \
        -H "Content-Type: application/json" \
        -d "$NODE_JSON")

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

    if [[ $http_code != 201 && $http_code != 200 ]]; then
        log_error "Ошибка создания ноды (HTTP $http_code)"
        echo "$body" | jq . 2>/dev/null || echo "$body"
        exit 1
    fi

    NODE_UUID=$(echo "$body" | jq -r '.response.uuid // .uuid // ""' 2>/dev/null)
    [[ -z "$NODE_UUID" || "$NODE_UUID" == "null" ]] && { log_error "Не удалось извлечь UUID ноды"; exit 1; }

    log_success "Нода создана: $NODE_NAME ($NODE_UUID)"
    NODE_SECRET_KEY="(генерируется при первом запуске ноды)"
else
    NODE_SECRET_KEY="(недоступен через API)"
fi

# ────────────────────────────────────────────────
# ФЛАГ
# ────────────────────────────────────────────────
FLAG=""
if [[ ${#COUNTRY_CODE} -eq 2 ]]; then
    first=$((0x1F1E6 + $(printf '%d' "'${COUNTRY_CODE:0:1}") - 65))
    second=$((0x1F1E6 + $(printf '%d' "'${COUNTRY_CODE:1:1}") - 65))
    
    if [[ $first -ge $((0x1F1E6)) && $first -le $((0x1F1FF)) && \
          $second -ge $((0x1F1E6)) && $second -le $((0x1F1FF)) ]]; then
        FLAG=$(printf "\\U$(printf '%x' $first)\\U$(printf '%x' $second)")
    else
        FLAG="🏳️"
    fi
else
    FLAG="🏳️"
fi

BASE_REMARK="${FLAG} ${COUNTRY_NAME:-$COUNTRY_CODE}${LOCATION//[^0-9]/}"

# ────────────────────────────────────────────────
# ПОЛУЧЕНИЕ СПИСКА СУЩЕСТВУЮЩИХ ХОСТОВ
# ────────────────────────────────────────────────
hosts_response=$(curl -s -w "\n%{http_code}" -X GET "${API_URL}/hosts" \
    -H "Authorization: Bearer $API_TOKEN")

hosts_http_code=$(echo "$hosts_response" | tail -n1)
hosts_body=$(echo "$hosts_response" | sed '$d')

# ────────────────────────────────────────────────
# СОЗДАНИЕ 4 ХОСТОВ
# ────────────────────────────────────────────────
log_step "Создание 4 хостов на панели $SELECTED_PANEL_NAME"

# Определяем конфигурации хостов
declare -A HOST_CONFIGS

# 1. vless (Reality)
HOST_CONFIGS["vless"]=$(cat <<EOF
{
    "inbound": { "configProfileUuid": "$PROFILE_UUID", "configProfileInboundUuid": "${INBOUND_UUIDS["vless"]}" },
    "remark": "${BASE_REMARK} vless",
    "address": "$NODE_NAME",
    "port": 443,
    "sni": "$NODE_NAME",
    "nodes": ["$NODE_UUID"],
    "isDisabled": false
}
EOF
)

# 2. HS2 (Hysteria2)
HOST_CONFIGS["HS2"]=$(cat <<EOF
{
    "inbound": { "configProfileUuid": "$PROFILE_UUID", "configProfileInboundUuid": "${INBOUND_UUIDS["HS2"]}" },
    "remark": "${BASE_REMARK} HS2",
    "address": "$NODE_NAME",
    "port": 443,
    "sni": "$NODE_NAME",
    "nodes": ["$NODE_UUID"],
    "isDisabled": false
}
EOF
)

# 3. gRPC
HOST_CONFIGS["gRPC"]=$(cat <<EOF
{
    "inbound": { "configProfileUuid": "$PROFILE_UUID", "configProfileInboundUuid": "${INBOUND_UUIDS["gRPC"]}" },
    "remark": "${BASE_REMARK} gRPC",
    "address": "$NODE_NAME",
    "port": 8443,
    "sni": "$NODE_NAME",
    "nodes": ["$NODE_UUID"],
    "isDisabled": false
}
EOF
)

# 4. xHTTP
HOST_CONFIGS["xHTTP"]=$(cat <<EOF
{
    "inbound": { "configProfileUuid": "$PROFILE_UUID", "configProfileInboundUuid": "${INBOUND_UUIDS["xHTTP"]}" },
    "remark": "${BASE_REMARK} xHTTP",
    "address": "$NODE_NAME",
    "port": 4443,
    "sni": "$NODE_NAME",
    "path": "/",
    "nodes": ["$NODE_UUID"],
    "isDisabled": false
}
EOF
)

# Создаём каждый хост
for host_type in "vless" "HS2" "gRPC" "xHTTP"; do
    remark="${BASE_REMARK} ${host_type}"
    
    # Проверяем, существует ли уже такой хост
    EXISTING_HOST=$(echo "$hosts_body" | jq -r --arg rem "$remark" '.response[]? | select(.remark==$rem) | .uuid // ""' 2>/dev/null)
    
    if [[ -n "$EXISTING_HOST" && "$EXISTING_HOST" != "null" ]]; then
        log_warning "Хост '$remark' уже существует (UUID: $EXISTING_HOST), пропускаем"
        continue
    fi
    
    # Создаём хост
    HOST_JSON="${HOST_CONFIGS[$host_type]}"
    
    response=$(curl -s -w "\n%{http_code}" -X POST "${API_URL}/hosts" \
        -H "Authorization: Bearer $API_TOKEN" \
        -H "Content-Type: application/json" \
        -d "$HOST_JSON")
    
    http_code=$(echo "$response" | tail -n1)
    body=$(echo "$response" | sed '$d')
    
    if [[ $http_code == 201 || $http_code == 200 ]]; then
        log_success "Хост '$remark' создан"
    else
        log_warning "Ошибка создания хоста '$remark' (HTTP $http_code)"
        echo "$body" | jq . 2>/dev/null || echo "$body"
    fi
done

# ============================================================
# ЗАПУСК КОНТЕЙНЕРОВ С ПРОВЕРКОЙ
# ============================================================
log_step "Запуск контейнеров через docker compose"

cd /opt || exit 1

MAX_ATTEMPTS=5
ATTEMPT=1
CONTAINERS_READY=false

# Запускаем контейнеры
docker compose up -d

if [[ $? -ne 0 ]]; then
    log_error "Ошибка при запуске контейнеров"
    log_info "Проверьте логи: docker compose -f /opt/docker-compose.yml logs"
else
    log_success "Контейнеры запущены, проверяем статус..."
    
    # Функция проверки статуса контейнеров
    check_containers() {
        local nginx_status=$(docker ps --filter "name=remnawave-nginx" --filter "status=running" --format "{{.Status}}" 2>/dev/null)
        local node_status=$(docker ps --filter "name=remnanode" --filter "status=running" --format "{{.Status}}" 2>/dev/null)
        
        if [[ -n "$nginx_status" && -n "$node_status" ]]; then
            return 0
        else
            return 1
        fi
    }
    
    while [[ $ATTEMPT -le $MAX_ATTEMPTS ]]; do
        log_info "Попытка $ATTEMPT из $MAX_ATTEMPTS: проверка статуса контейнеров..."
        
        if check_containers; then
            CONTAINERS_READY=true
            log_success "Все контейнеры успешно запущены:"
            docker ps --filter "name=remnawave-nginx" --format "table {{.Names}}\t{{.Status}}" 2>/dev/null
            docker ps --filter "name=remnanode" --format "table {{.Names}}\t{{.Status}}" 2>/dev/null
            break
        fi
        
        if [[ $ATTEMPT -lt $MAX_ATTEMPTS ]]; then
            log_info "Контейнеры ещё не готовы, ждём 15 секунд..."
            sleep 15
        fi
        
        ATTEMPT=$((ATTEMPT + 1))
    done
    
    if [[ "$CONTAINERS_READY" != "true" ]]; then
        log_warning "Контейнеры не запустились после $MAX_ATTEMPTS попыток"
        
        # Показываем логи для диагностики
        echo ""
        echo "=== Логи remnawave-nginx ==="
        docker logs remnawave-nginx --tail 20 2>/dev/null || echo "Контейнер не найден"
        echo ""
        echo "=== Логи remnanode ==="
        docker logs remnanode --tail 20 2>/dev/null || echo "Контейнер не найден"
        echo ""
        
        log_warning "Проверьте конфигурацию вручную:"
        echo "  - docker compose -f /opt/docker-compose.yml logs"
        echo "  - docker compose -f /opt/docker-compose.yml ps"
        echo "  - journalctl -u docker"
        
        # Проверяем статус всех контейнеров
        echo ""
        echo "Текущий статус контейнеров:"
        docker ps -a --filter "name=remnawave-nginx" --format "table {{.Names}}\t{{.Status}}" 2>/dev/null
        docker ps -a --filter "name=remnanode" --format "table {{.Names}}\t{{.Status}}" 2>/dev/null
    fi
fi

# ────────────────────────────────────────────────
# ФИНАЛ
# ────────────────────────────────────────────────
log_success "Настройка завершена успешно для панели $SELECTED_PANEL_NAME"
echo ""
echo "=================================================="
echo "Панель           : $SELECTED_PANEL_NAME (${SELECTED_PANEL_NAME}.4rp.su)"
echo "Локация          : $LOCATION"
echo "Домен            : ${LOCATION}.8rmdgz.ru"
echo "Порт ноды        : 9873"
echo "Профиль          : $PROFILE_NAME"
echo "UUID профиля     : $PROFILE_UUID"
echo "UUID ноды        : $NODE_UUID"
echo "Secret Key       : $NODE_SECRET_KEY"
echo "IP сервера       : $SERVER_IP"
echo "Код страны       : $COUNTRY_CODE"
echo "Название страны  : $COUNTRY_NAME"
echo ""
echo "Инбаунды:"
echo "  - vless  : ${INBOUND_UUIDS["vless"]}"
echo "  - HS2    : ${INBOUND_UUIDS["HS2"]}"
echo "  - gRPC   : ${INBOUND_UUIDS["gRPC"]}"
echo "  - xHTTP  : ${INBOUND_UUIDS["xHTTP"]}"
echo ""
echo "Хосты:"
echo "  - ${BASE_REMARK} vless  (порт 443, Reality)"
echo "  - ${BASE_REMARK} HS2    (порт 443, Hysteria2)"
echo "  - ${BASE_REMARK} gRPC   (порт 8443, Reality)"
echo "  - ${BASE_REMARK} xHTTP  (порт 4443, Reality)"
echo ""

if [[ "$CONTAINERS_READY" == "true" ]]; then
    echo "✅ Контейнеры успешно запущены"
else
    echo "⚠️  Контейнеры не запустились. Проверьте логи выше."
fi
echo ""

if [[ "$NODE_CREATED" == "true" ]]; then
    echo "⚠️  Секретный ключ будет сгенерирован автоматически при первом запуске ноды."
    echo "    Убедитесь, что нода может подключиться к панели для получения ключа."
    echo ""
fi

echo "📊 Полезные команды:"
echo "  - Просмотр логов:         docker compose -f /opt/docker-compose.yml logs -f"
echo "  - Перезапуск контейнеров: docker compose -f /opt/docker-compose.yml restart"
echo "  - Остановка контейнеров:  docker compose -f /opt/docker-compose.yml down"
echo "=================================================="

exit 0
