// Example environment for the test_on_env Bazel rule.
package main

import (
	"fmt"
	"net"
	"net/http"
	"os"
	"path"
	"strconv"
	"time"
)

const (
	delaySeconds        = 3
	envPortFileBaseName = "port"
)

func main() {
	// Read in build paths to the ready and port files.
	envDir := os.Getenv("ENV_DIR")
	if envDir == "" {
		panic(fmt.Sprintf("required environment variable ENV_DIR is unset"))
	}
	envReadyFile := os.Getenv("ENV_READY_FILE")
	if envReadyFile == "" {
		panic(fmt.Sprintf("required environment variable ENV_READY_FILE is unset"))
	}
	envPortFile := path.Join(envDir, envPortFileBaseName)

	// We test the readiness check by simulating a delay.
	fmt.Printf("Simulating a %d-second delay before starting the HTTP server...\n", delaySeconds)
	time.Sleep(delaySeconds * time.Second)

	// Serve a plaintext echo endpoint.
	http.HandleFunc("/echo", func(w http.ResponseWriter, r *http.Request) {
		msg := r.URL.Query().Get("msg")
		if msg == "" {
			w.WriteHeader(http.StatusBadRequest)
			if _, err := fmt.Fprintln(w, `Error: Query parameter "msg" is empty or missing.`); err != nil {
				panic(err)
			}
		} else {
			if _, err := fmt.Fprintln(w, msg); err != nil {
				panic(err)
			}
		}
	})

	// Listen on an unused port chosen by the OS.
	listener, err := net.Listen("tcp", ":0")
	if err != nil {
		panic(err)
	}
	port := listener.Addr().(*net.TCPAddr).Port

	// Write port file first.
	err = os.WriteFile(envPortFile, []byte(strconv.Itoa(port)), 0644)
	if err != nil {
		panic(err)
	}

	// Write ready file second. This signals that the environment is ready for the tests to execute.
	err = os.WriteFile(envReadyFile, []byte{}, 0644)
	if err != nil {
		panic(err)
	}

	fmt.Printf("Listening on port %d.\n", port)
	err = http.Serve(listener, nil) // Always returns a non-nil error.

	if err.Error() != "" {
		panic(err)
	}
}
