package main

import (
	"flag"
	"fmt"

	"code.hackerspace.pl/q3k/mirko"
	"github.com/golang/glog"
	"github.com/ybbus/jsonrpc"

	pb "code.hackerspace.pl/q3k/arista-proxy/proto"
)

var (
	flagAristaAPI 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
}

type server struct {
	arista *aristaClient
}

func main() {
	flag.StringVar(&flagAristaAPI, "arista_api", "http://admin:password@1.2.3.4:80/command-api", "Arista remote endpoint")
	flag.Parse()

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

	m := mirko.New()
	if err := m.Listen(); err != nil {
		glog.Exitf("Listen(): %v", err)
	}

	s := &server{
		arista: arista,
	}
	pb.RegisterAristaProxyServer(m.GRPC(), s)

	if err := m.Serve(); err != nil {
		glog.Exitf("Serve(): %v", err)
	}

	select {}
}
