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
)

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.Set("logtostderr", "true")
	flag.Parse()

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

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

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