//go:build windows
// +build windows

package transparent

import (
	"context"
	"fmt"
	"net"

	"github.com/sirupsen/logrus"
)

// Config Windows compatible configuration struct
type Config struct {
	ProxyPort       int      // HTTP代理端口
	TransparentPort int      // 透明代理端口
	DNSPort         int      // DNS代理端口
	BypassIPs       []string // 不代理的IP列表
	BypassDomains   []string // 不代理的域名列表
}

// TransparentProxy Windows implementation
type TransparentProxy struct {
	config Config
	logger *logrus.Logger
}

// NewTransparentProxy creates a new Windows transparent proxy (compatible interface)
func NewTransparentProxy(config Config, logger *logrus.Logger) *TransparentProxy {
	return &TransparentProxy{
		config: config,
		logger: logger,
	}
}

// SetupTransparentProxy sets up transparent proxy (Windows stub)
func (tp *TransparentProxy) SetupTransparentProxy(ctx context.Context) error {
	tp.logger.Warn("Transparent proxy is not fully supported on Windows")
	tp.logger.Info("Please use system proxy settings or HTTP proxy mode")
	return fmt.Errorf("transparent proxy not supported on Windows")
}

// CleanupTransparentProxy cleans up transparent proxy (Windows stub)
func (tp *TransparentProxy) CleanupTransparentProxy() error {
	tp.logger.Info("Transparent proxy cleanup (Windows)")
	return nil
}

// GetOriginalDestination returns original destination (Windows stub)
func (tp *TransparentProxy) GetOriginalDestination(conn net.Conn) (string, error) {
	return "", fmt.Errorf("transparent proxy not supported on Windows")
}

// RequiresRoot returns whether root privileges are required (Windows compatible)
func RequiresRoot() bool {
	return false // Windows doesn't require root for this operation
}

// IsTransparentSupported checks if transparent proxy is supported (Windows compatible)
func IsTransparentSupported() bool {
	return false // Windows implementation is not supported
}

// Start starts the transparent proxy (Windows implementation)
func (tp *TransparentProxy) Start(ctx context.Context) error {
	return tp.SetupTransparentProxy(ctx)
}

// Stop stops the transparent proxy
func (tp *TransparentProxy) Stop() error {
	return tp.CleanupTransparentProxy()
}

// SetupFirewallRules sets up firewall rules (Windows stub)
func (tp *TransparentProxy) SetupFirewallRules() error {
	tp.logger.Warn("Firewall rule setup not implemented for Windows")
	return nil
}

// CleanupFirewallRules cleans up firewall rules (Windows stub)
func (tp *TransparentProxy) CleanupFirewallRules() error {
	tp.logger.Info("Firewall rule cleanup (Windows)")
	return nil
}
