package config

import (
	"fmt"
	"net/http"
	"strings"
)

// Checks to make sure all required environment variables are set
func validateRequired(config *Config) error {
	if config.Hostname == "" {
		return fmt.Errorf("%s is required", HostnameEnv)
	}

	if config.TSControlURL == "" {
		return fmt.Errorf("%s is required", TSControlURLEnv)
	}

	if config.HPControlURL == "" {
		return fmt.Errorf("%s is required", HPControlURLEnv)
	}

	if config.TSAuthKey == "" {
		return fmt.Errorf("%s is required", TSAuthKeyEnv)
	}

	return nil
}

// Pings the Tailscale control server to make sure it's up and running
func validateTSReady(config *Config) error {
	testURL := config.TSControlURL
	if strings.HasSuffix(testURL, "/") {
		testURL = testURL[:len(testURL)-1]
	}

	testURL = fmt.Sprintf("%s/key?v=109", testURL)
	resp, err := http.Get(testURL)
	if err != nil {
		return fmt.Errorf("Failed to connect to TS control server: %s", err)
	}

	if resp.StatusCode != 200 {
		return fmt.Errorf("Failed to connect to TS control server: %s", resp.Status)
	}

	return nil
}

// Pings the Headplane server to make sure it's up and running
func validateHPReady(config *Config) error {
	testURL := config.HPControlURL
	if strings.HasSuffix(testURL, "/") {
		testURL = testURL[:len(testURL)-1]
	}

	testURL = fmt.Sprintf("%s/healthz", testURL)
	resp, err := http.Get(testURL)
	if err != nil {
		return fmt.Errorf("Failed to connect to HP control server: %s", err)
	}

	if resp.StatusCode != 200 {
		return fmt.Errorf("Failed to connect to HP control server: %s", resp.Status)
	}

	return nil
}
