package proxy

import (
	"net"
	"net/url"
	"os"
	"time"

	"golang.org/x/net/proxy"
)

func fromURL(proxyStr string) proxy.Dialer {
	direct := &net.Dialer{}
	proxyURL, err := url.Parse(proxyStr)

	if err != nil {
		return direct
	}
	proxy, err := proxy.FromURL(proxyURL, direct)
	if err != nil {
		return direct
	}
	return proxy
}

func MySQLProxyDialer() proxy.Dialer {
	var dialer proxy.Dialer = &net.Dialer{}

	proxyURL := os.Getenv("MYSQL_PROXY")
	if proxyURL == "" {
		return dialer
	}
	return fromURL(proxyURL)
}

func GrpcProxyDialer() proxy.Dialer {
	var dialer proxy.Dialer = &net.Dialer{}

	proxyURL := os.Getenv("GRPC_PROXY")
	if proxyURL == "" {
		return dialer
	}
	return fromURL(proxyURL)
}

func ProxyDialer(timeout time.Duration) proxy.Dialer {
	var dialer proxy.Dialer = &net.Dialer{Timeout: timeout}
	proxyURL := os.Getenv("ALL_PROXY")
	if proxyURL == "" {
		return dialer
	}
	return fromURL(proxyURL)
}
