package main

import (
	"flag"
	"fmt"

	"github.com/golang/glog"
	"github.com/ybbus/jsonrpc"
)

var (
	flagAristaAPI       string
	flagListenAddress   string
	flagDebugAddress    string
	flagCAPath          string
	flagCertificatePath string
	flagKeyPath         string
	flagPKIRealm        string
)

type aristaClient struct {
	rpc jsonrpc.RPCClient
}

func (c *aristaClient) structuredCall(res interface{}, command ...string) error {
	cmd := struct {
		Version int      `json:"version"`
		Cmds    []string `json:"cmds"`
		Format  string   `json:"format"`
	}{
		Version: 1,
		Cmds:    command,
		Format:  "json",
	}

	err := c.rpc.CallFor(res, "runCmds", cmd)
	if err != nil {
		return fmt.Errorf("could not execute structured call: %v", err)
	}
	return nil
}

func main() {
	flag.StringVar(&flagAristaAPI, "arista_api", "http://admin:password@1.2.3.4:80/command-api", "Arista remote endpoint")
	flag.StringVar(&flagListenAddress, "listen_address", "127.0.0.1:8080", "gRPC listen address")
	flag.StringVar(&flagDebugAddress, "debug_address", "127.0.0.1:8081", "Debug HTTP listen address, or empty to disable")
	flag.StringVar(&flagCAPath, "tls_ca_path", "pki/ca.pem", "Path to PKI CA certificate")
	flag.StringVar(&flagCertificatePath, "tls_certificate_path", "pki/service.pem", "Path to PKI service certificate")
	flag.StringVar(&flagKeyPath, "tls_key_path", "pki/service-key.pem", "Path to PKI service private key")
	flag.StringVar(&flagPKIRealm, "pki_realm", "svc.cluster.local", "PKI realm")
	flag.Set("logtostderr", "true")
	flag.Parse()

	arista := &aristaClient{
		rpc: jsonrpc.NewClient(flagAristaAPI),
	}

	opts := &serverOpts{
		listenAddress:      flagListenAddress,
		debugAddress:       flagDebugAddress,
		tlsCAPath:          flagCAPath,
		tlsCertificatePath: flagCertificatePath,
		tlsKeyPath:         flagKeyPath,
		pkiRealm:           flagPKIRealm,
	}
	server, err := newServer(opts, arista)
	if err != nil {
		glog.Errorf("Could not create server: %v", err)
	}

	glog.Info("Starting up...")
	server.serveForever()
}
