/*
 * If changed, have to run `npm run build-docker-builder-go`.
 * This script should be run after a period of time (180s), because the server may need some time to prepare.
 */
package main

import (
	"crypto/tls"
	"io/ioutil"
	"log"
	"net/http"
	"os"
	"strings"
	"time"
)

func main() {
	// Is K8S + "dockge" as the container name
	// See https://github.com/louislam/uptime-kuma/pull/2083
	isK8s := strings.HasPrefix(os.Getenv("DOCKGE_PORT"), "tcp://")

	// process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
	http.DefaultTransport.(*http.Transport).TLSClientConfig = &tls.Config{
		InsecureSkipVerify: true,
	}

	client := http.Client{
		Timeout: 28 * time.Second,
	}

	sslKey := os.Getenv("DOCKGE_SSL_KEY")
	sslCert := os.Getenv("DOCKGE_SSL_CERT")

	hostname := os.Getenv("DOCKGE_HOST")
	if len(hostname) == 0 {
		hostname = "127.0.0.1"
	}

	port := ""
	// DOCKGE_PORT is override by K8S unexpectedly,
	if !isK8s {
		port = os.Getenv("DOCKGE_PORT")
	}
	if len(port) == 0 {
		port = "5001"
	}

	protocol := ""
	if len(sslKey) != 0 && len(sslCert) != 0 {
		protocol = "https"
	} else {
		protocol = "http"
	}

	url := protocol + "://" + hostname + ":" + port

	log.Println("Checking " + url)
	resp, err := client.Get(url)

	if err != nil {
		log.Fatalln(err)
	}

	defer resp.Body.Close()

	_, err = ioutil.ReadAll(resp.Body)

	if err != nil {
		log.Fatalln(err)
	}

	log.Printf("Health Check OK [Res Code: %d]\n", resp.StatusCode)

}