package main

import (
	"encoding/json"
	"flag"
	"fmt"
	"log"
	"os"
	"path/filepath"

	"github.com/spf13/viper"
	"github.com/tidbcloud/service-catalog/pkg/model"
	"github.com/tidbcloud/tiinf/monitor/tilog"
	"go.uber.org/zap"
)

var (
	masterURL  string
	kubeconfig string
)

func main() {
	tilog.PlainInfo("Service Catalog started.")
	viper.SetConfigName("config")
	viper.SetConfigType("yaml")
	viper.AddConfigPath("/etc/service-catalog")
	err := viper.ReadInConfig()
	if err != nil {
		panic(err)
	}

	flag.StringVar(&kubeconfig, "kubeconfig", defaultKubeconfig(), "Path to a kubeconfig. Only required if out-of-cluster.")
	flag.StringVar(&masterURL, "master", "", "The address of the Kubernetes API server. Overrides any value in kubeconfig. Only required if out-of-cluster.")
	flag.Parse()

	metas, applications, err := model.ReadMetas(viper.GetString("metaPath"))
	if err != nil {
		return
	}

	metasJSON, err := json.MarshalIndent(metas, "", "  ")
	if err != nil {
		log.Printf("Failed to marshal metas: %v", err)
	} else {
		fmt.Println("Metas Info:")
		fmt.Println(string(metasJSON))
	}

	applicationsJSON, err := json.MarshalIndent(applications, "", "  ")
	if err != nil {
		log.Printf("Failed to marshal applications: %v", err)
	} else {
		fmt.Println("Applications Info:")
		fmt.Println(string(applicationsJSON))
	}
}

func defaultKubeconfig() string {
	fname := os.Getenv("KUBECONFIG")
	if fname != "" {
		return fname
	}
	home, err := os.UserHomeDir()
	if err != nil {
		tilog.PlainWarn("failed to get home directory", zap.Error(err))
		return ""
	}
	return filepath.Join(home, ".kube", "config")
}
