package ready

import (
	"net"
	"net/http"
	"os"
	"strconv"

	"github.com/spf13/cobra"
	"github.com/spf13/viper"
	"github.com/zitadel/logging"
)

func New() *cobra.Command {
	return &cobra.Command{
		Use:   "ready",
		Short: "Checks if zitadel is ready",
		Long:  "Checks if zitadel is ready",
		Run: func(cmd *cobra.Command, args []string) {
			config := MustNewConfig(viper.GetViper())
			if !ready(config) {
				os.Exit(1)
			}
		},
	}
}

func ready(config *Config) bool {
	res, err := http.Get("http://" + net.JoinHostPort("localhost", strconv.Itoa(int(config.Port))) + "/debug/ready")
	if err != nil {
		logging.WithError(err).Warn("ready check failed")
		return false
	}
	defer res.Body.Close()
	logging.WithFields("status", res.StatusCode).Warn("ready check failed")
	return res.StatusCode == 200
}