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:42000", "gRPC listen address")
	flag.StringVar(&flagDebugAddress, "debug_address", "127.0.0.1:42001", "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()
}
