package dockertestutil

import (
	"os"

	"github.com/ory/dockertest/v3/docker"
)

func IsRunningInContainer() bool {
	if _, err := os.Stat("/.dockerenv"); err != nil {
		return false
	}

	return true
}

func DockerRestartPolicy(config *docker.HostConfig) {
	// set AutoRemove to true so that stopped container goes away by itself on error *immediately*.
	// when set to false, containers remain until the end of the integration test.
	config.AutoRemove = false
	config.RestartPolicy = docker.RestartPolicy{
		Name: "no",
	}
}

func DockerAllowLocalIPv6(config *docker.HostConfig) {
	if config.Sysctls == nil {
		config.Sysctls = make(map[string]string, 1)
	}
	config.Sysctls["net.ipv6.conf.all.disable_ipv6"] = "0"
}

func DockerAllowNetworkAdministration(config *docker.HostConfig) {
	// Needed since containerd (1.7.24)
	// https://github.com/tailscale/tailscale/issues/14256
	// https://github.com/opencontainers/runc/commit/2ce40b6ad72b4bd4391380cafc5ef1bad1fa0b31
	config.CapAdd = append(config.CapAdd, "NET_ADMIN")
	config.CapAdd = append(config.CapAdd, "NET_RAW")
	config.Devices = append(config.Devices, docker.Device{
		PathOnHost:        "/dev/net/tun",
		PathInContainer:   "/dev/net/tun",
		CgroupPermissions: "rwm",
	})
}