package main

import (
	"flag"

	"k8s.io/client-go/kubernetes"
	"k8s.io/client-go/rest"
	"k8s.io/client-go/tools/clientcmd"

	"github.com/giolekva/pcloud/events"

	"github.com/golang/glog"
)

var kubeconfig = flag.String("kubeconfig", "", "Absolute path to the kubeconfig file.")
var apiAddr = flag.String("api_addr", "", "PCloud API server address.")
var appManagerAddr = flag.String("app_manager_addr", "", "PCloud AppManager address.")
var objectStoreAddr = flag.String("object_store_addr", "", "S3 compatible object store address.")

func getKubeConfig() (*rest.Config, error) {
	if *kubeconfig != "" {
		return clientcmd.BuildConfigFromFlags("", *kubeconfig)
	} else {
		return rest.InClusterConfig()
	}
}

func main() {
	flag.Parse()
	kubeconfig, err := getKubeConfig()
	if err != nil {
		glog.Fatalf("Could not initialize Kubeconfig: %v", err)
	}
	kube, err := kubernetes.NewForConfig(kubeconfig)
	if err != nil {
		glog.Fatalf("Could not create Kubernetes API client: %v", err)
	}
	eventStore := events.NewGraphQLClient(*apiAddr)
	appManager := events.NewAppManagerClient(*appManagerAddr)
	events.NewSingleEventAtATimeProcessor(
		eventStore, appManager, kube, *apiAddr, *objectStoreAddr).Start()
}
