#!/bin/bash
# ========== warp_delete_config.sh ==========
# Удаление WARP-настроек из конфигурации ноды

# ---------- ЦВЕТА ----------
COLOR_GREEN='\033[0;32m'
COLOR_RED='\033[0;31m'
COLOR_YELLOW='\033[0;33m'
COLOR_RESET='\033[0m'

# ---------- ФУНКЦИЯ ЧТЕНИЯ ВВОДА ----------
reading() {
    local prompt="$1"
    local var_name="$2"
    echo -e "${COLOR_GREEN}[?]${COLOR_RESET} ${COLOR_YELLOW}${prompt}${COLOR_RESET}"
    read -r "$var_name"
}

# ---------- ЗАГРУЗКА API (СЕРВЕР) ----------
load_api() {
    local api_url="https://cloud.free-surf.ru/script/warp/api.sh"
    local api_script=$(mktemp)
    
    echo -e "${COLOR_YELLOW}Загрузка API модуля с сервера...${COLOR_RESET}"
    
    if curl -fsSL "$api_url" -o "$api_script" 2>/dev/null; then
        source "$api_script"
        rm -f "$api_script"
        echo -e "${COLOR_GREEN}✅ API модуль загружен${COLOR_RESET}"
        return 0
    else
        rm -f "$api_script"
        echo -e "${COLOR_RED}❌ Не удалось загрузить API модуль с $api_url${COLOR_RESET}"
        return 1
    fi
}

# ---------- ОСНОВНАЯ ФУНКЦИЯ ----------
manage_warp_delete_settings() {
    load_api || return 1

    local domain_url="$SELECTED_PANEL_URL"
    if [[ -z "$domain_url" ]]; then
        domain_url="https://panel.4rp.su/api"
    fi

    local token="$SELECTED_PANEL_TOKEN"

    if [[ -z "$token" ]]; then
        echo -e "${COLOR_RED}❌ API токен не установлен!${COLOR_RESET}"
        echo -e "${COLOR_YELLOW}Проверьте, что вы запускаете скрипт через install.sh${COLOR_RESET}"
        echo -e "${COLOR_YELLOW}И что в install.sh заполнен SELECTED_PANEL_TOKEN${COLOR_RESET}"
        return 1
    fi

    echo -e "${COLOR_GREEN}✅ Токен найден (первые 20 символов: ${token:0:20}...)${COLOR_RESET}"
    echo -e "${COLOR_GREEN}✅ URL панели: $domain_url${COLOR_RESET}"

    # Проверяем доступность панели
    echo -e "${COLOR_YELLOW}Проверка доступности панели...${COLOR_RESET}"
    if ! curl -s --connect-timeout 5 "$domain_url/config-profiles" -H "Authorization: Bearer $token" > /dev/null 2>&1; then
        echo -e "${COLOR_RED}❌ Панель недоступна по адресу: $domain_url${COLOR_RESET}"
        echo -e "${COLOR_YELLOW}Проверьте соединение с интернетом и доступность panel.4rp.su${COLOR_RESET}"
        return 1
    fi
    echo -e "${COLOR_GREEN}✅ Панель доступна${COLOR_RESET}"

    echo -e ""
    echo -e "${COLOR_RED}⚠️  ВНИМАНИЕ${COLOR_RESET}"
    echo -e "${COLOR_YELLOW}Вы собираетесь удалить WARP-настройки из конфигурации профиля.${COLOR_RESET}"
    echo -e ""
    echo -e "${COLOR_GREEN}[?]${COLOR_RESET} ${COLOR_YELLOW}Продолжить? (y/n):${COLOR_RESET}"
    read confirm
    echo

    if [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then
        echo -e "${COLOR_YELLOW}Отмена${COLOR_RESET}"
        return 0
    fi

    # 1. Получаем список конфигураций
    echo -e "${COLOR_YELLOW}Получение списка конфигураций...${COLOR_RESET}"
    local config_response=$(make_api_request "GET" "${domain_url}/config-profiles" "$token")

    if [ -z "$config_response" ]; then
        echo -e "${COLOR_RED}❌ Пустой ответ от API${COLOR_RESET}"
        return 1
    fi

    if ! echo "$config_response" | jq -e '.' > /dev/null 2>&1; then
        echo -e "${COLOR_RED}❌ Невалидный JSON ответ от API${COLOR_RESET}"
        echo -e "${COLOR_YELLOW}Ответ: ${config_response:0:200}${COLOR_RESET}"
        return 1
    fi

    local config_count=$(echo "$config_response" | jq '.response.configProfiles | length' 2>/dev/null)
    if [ -z "$config_count" ] || [ "$config_count" -eq 0 ]; then
        echo -e "${COLOR_RED}❌ Нет доступных конфигураций${COLOR_RESET}"
        echo -e "${COLOR_YELLOW}Создайте хотя бы один профиль через панель.${COLOR_RESET}"
        return 1
    fi

    # 2. Показываем список конфигураций
    echo -e ""
    echo -e "${COLOR_YELLOW}Доступные конфигурации (${config_count}):${COLOR_RESET}"
    echo -e ""
    local i=1
    declare -A config_map
    while IFS= read -r line; do
        local name=$(echo "$line" | awk '{print $1}')
        local uuid=$(echo "$line" | awk '{print $2}')
        if [[ -n "$name" && -n "$uuid" ]]; then
            echo -e "${COLOR_YELLOW}$i. $name${COLOR_RESET}"
            config_map[$i]="$uuid"
            ((i++))
        fi
    done <<< "$(echo "$config_response" | jq -r '.response.configProfiles[] | select(.uuid and .name) | "\(.name) \(.uuid)"' 2>/dev/null)"

    echo -e ""
    echo -e "${COLOR_YELLOW}0. Выход${COLOR_RESET}"
    echo -e ""
    reading "Выберите конфигурацию (номер)" CONFIG_OPTION

    if [ "$CONFIG_OPTION" == "0" ]; then
        echo -e "${COLOR_YELLOW}Выход${COLOR_RESET}"
        return 0
    fi

    if [ -z "${config_map[$CONFIG_OPTION]}" ]; then
        echo -e "${COLOR_RED}❌ Неверный выбор${COLOR_RESET}"
        return 1
    fi

    local selected_uuid=${config_map[$CONFIG_OPTION]}

    # 3. Получаем выбранную конфигурацию
    echo -e "${COLOR_YELLOW}Получение конфигурации...${COLOR_RESET}"
    local config_data=$(make_api_request "GET" "${domain_url}/config-profiles/$selected_uuid" "$token")
    if [ -z "$config_data" ] || ! echo "$config_data" | jq -e '.' > /dev/null 2>&1; then
        echo -e "${COLOR_RED}❌ Ошибка получения данных конфигурации${COLOR_RESET}"
        return 1
    fi

    local config_json=$(echo "$config_data" | jq -r '.response.config // .config // ""')
    if [ -z "$config_json" ] || [ "$config_json" == "null" ]; then
        echo -e "${COLOR_RED}❌ Не найден config в ответе API${COLOR_RESET}"
        return 1
    fi

    # 4. Удаляем WARP outbound
    echo -e "${COLOR_YELLOW}Удаление WARP outbound...${COLOR_RESET}"
    if echo "$config_json" | jq -e '.outbounds[] | select(.tag == "warp-out")' > /dev/null 2>&1; then
        config_json=$(echo "$config_json" | jq 'del(.outbounds[] | select(.tag == "warp-out"))' 2>/dev/null)
        echo -e "${COLOR_GREEN}✅ WARP outbound удалён${COLOR_RESET}"
    else
        echo -e "${COLOR_YELLOW}WARP outbound не найден${COLOR_RESET}"
    fi

    # 5. Удаляем WARP правило из routing
    echo -e "${COLOR_YELLOW}Удаление WARP правила из routing...${COLOR_RESET}"
    if echo "$config_json" | jq -e '.routing.rules[] | select(.outboundTag == "warp-out")' > /dev/null 2>&1; then
        config_json=$(echo "$config_json" | jq 'del(.routing.rules[] | select(.outboundTag == "warp-out"))' 2>/dev/null)
        echo -e "${COLOR_GREEN}✅ WARP правило удалено${COLOR_RESET}"
    else
        echo -e "${COLOR_YELLOW}WARP правило не найдено${COLOR_RESET}"
    fi

    # 6. Отправляем обновлённую конфигурацию
    echo -e "${COLOR_YELLOW}Отправка обновлённой конфигурации...${COLOR_RESET}"
    local update_response=$(make_api_request "PATCH" "${domain_url}/config-profiles" "$token" "{\"uuid\": \"$selected_uuid\", \"config\": $config_json}")
    if [ -z "$update_response" ] || ! echo "$update_response" | jq -e '.' > /dev/null 2>&1; then
        echo -e "${COLOR_RED}❌ Ошибка обновления конфигурации${COLOR_RESET}"
        return 1
    fi

    echo -e ""
    echo -e "${COLOR_GREEN}✅ WARP-настройки успешно удалены из конфигурации${COLOR_RESET}"
    echo -e ""
    echo -e "${COLOR_YELLOW}Удалённые компоненты:${COLOR_RESET}"
    echo -e "  ${COLOR_GREEN}➤${COLOR_RESET} Outbound: ${COLOR_YELLOW}warp-out${COLOR_RESET}"
    echo -e "  ${COLOR_GREEN}➤${COLOR_RESET} Routing rule: ${COLOR_YELLOW}warp-out${COLOR_RESET}"
    echo -e ""
    echo -e "${COLOR_YELLOW}Для применения настроек перезапустите ноду:${COLOR_RESET}"
    echo -e "  ${COLOR_GREEN}docker compose -f /opt/docker-compose.yml restart remnanode${COLOR_RESET}"

    return 0
}

manage_warp_delete_settings
