package main

import (
	"context"
	"fmt"
	"net/http"
	"os"
	"strings"
	"time"
)

func main() {
	target := "http://127.0.0.1:8080/readyz"
	if len(os.Args) > 1 && os.Args[1] != "" {
		target = os.Args[1]
	}

	ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
	defer cancel()
	req, err := http.NewRequestWithContext(ctx, http.MethodGet, target, nil)
	if err != nil {
		fmt.Fprintln(os.Stderr, err)
		os.Exit(2)
	}
	req.Header.Set("X-Forwarded-Proto", env("BANKING_HEALTHCHECK_FORWARDED_PROTO", "https"))
	if host := healthcheckHost(); host != "" {
		req.Host = host
	}
	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		fmt.Fprintln(os.Stderr, err)
		os.Exit(1)
	}
	defer resp.Body.Close()
	if resp.StatusCode < 200 || resp.StatusCode >= 300 {
		fmt.Fprintf(os.Stderr, "unhealthy status %d\n", resp.StatusCode)
		os.Exit(1)
	}
}

func healthcheckHost() string {
	if value := env("BANKING_HEALTHCHECK_HOST", ""); value != "" {
		return value
	}
	allowedHosts := strings.Split(env("BANKING_ALLOWED_HOSTS", ""), ",")
	for _, host := range allowedHosts {
		if trimmed := strings.TrimSpace(host); trimmed != "" {
			return trimmed
		}
	}
	return ""
}

func env(key, fallback string) string {
	value := strings.TrimSpace(os.Getenv(key))
	if value == "" {
		return fallback
	}
	return value
}
