// +build windows

package proxy

import (
	"fmt"
	"os/exec"
	"strings"
)

// EnableSystemProxy включает системный прокси в Windows
func EnableSystemProxy(proxyAddr string) error {
	// Включаем прокси через реестр
	cmd := exec.Command("reg", "add",
		"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings",
		"/v", "ProxyEnable",
		"/t", "REG_DWORD",
		"/d", "1",
		"/f")
	
	if err := cmd.Run(); err != nil {
		return fmt.Errorf("ошибка включения прокси: %w", err)
	}

	// Устанавливаем адрес прокси
	cmd = exec.Command("reg", "add",
		"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings",
		"/v", "ProxyServer",
		"/t", "REG_SZ",
		"/d", fmt.Sprintf("socks=%s", proxyAddr),
		"/f")
	
	if err := cmd.Run(); err != nil {
		return fmt.Errorf("ошибка установки адреса прокси: %w", err)
	}

	// Обновляем настройки Internet Explorer (применяет изменения)
	refreshIESettings()

	return nil
}

// DisableSystemProxy отключает системный прокси в Windows
func DisableSystemProxy() error {
	// Отключаем прокси
	cmd := exec.Command("reg", "add",
		"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings",
		"/v", "ProxyEnable",
		"/t", "REG_DWORD",
		"/d", "0",
		"/f")
	
	if err := cmd.Run(); err != nil {
		return fmt.Errorf("ошибка отключения прокси: %w", err)
	}

	// Очищаем адрес прокси
	cmd = exec.Command("reg", "delete",
		"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings",
		"/v", "ProxyServer",
		"/f")
	
	cmd.Run() // Игнорируем ошибку, если ключ не существует

	// Обновляем настройки
	refreshIESettings()

	return nil
}

// GetSystemProxyStatus проверяет статус системного прокси
func GetSystemProxyStatus() (bool, string, error) {
	// Проверяем, включен ли прокси
	cmd := exec.Command("reg", "query",
		"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings",
		"/v", "ProxyEnable")
	
	output, err := cmd.Output()
	if err != nil {
		return false, "", nil
	}

	enabled := strings.Contains(string(output), "0x1")

	// Получаем адрес прокси
	cmd = exec.Command("reg", "query",
		"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings",
		"/v", "ProxyServer")
	
	output, err = cmd.Output()
	proxyAddr := ""
	if err == nil {
		lines := strings.Split(string(output), "\n")
		for _, line := range lines {
			if strings.Contains(line, "ProxyServer") {
				parts := strings.Fields(line)
				if len(parts) >= 3 {
					proxyAddr = parts[len(parts)-1]
				}
			}
		}
	}

	return enabled, proxyAddr, nil
}

func refreshIESettings() {
	// Используем rundll32 для обновления настроек Internet Explorer
	cmd := exec.Command("rundll32.exe", "inetcpl.cpl,ClearMyTracksByProcess", "8")
	cmd.Run()
}
