package main

import (
	"flag"
	"log"

	"golang.org/x/net/context"
	"google.golang.org/grpc"
	pb "v.io/x/ref/examples/grpc-fortune/proto"
	"v.io/x/ref/examples/grpc-fortune/vgrpc"
)

const (
	address     = "localhost:50053"
	defaultName = "world"
)

func main() {
	get := flag.Bool("g", false, "Whether to make a get request.")
	add := flag.String("a", "", "Add a fortune.")
	has := flag.String("h", "", "Check whether a fortune is present.")
	flag.Parse()

	// Set up a connection to the server.
	conn, err := grpc.Dial(address, grpc.WithTransportCredentials(&vgrpc.VanadiumCred{}))
	if err != nil {
		log.Fatalf("did not connect: %v", err)
	}
	defer conn.Close()
	c := pb.NewFortuneClient(conn)

	if *get {
		log.Printf("Calling Get now.")
		r, err := c.Get(context.Background(), &pb.FortuneGetRequest{})
		if err != nil {
			log.Fatalf("could not get: %v", err)
		}
		log.Printf("Fortune: %s", r.Fortune)
	}

	if *add != "" {
		_, err := c.Add(context.Background(), &pb.FortuneAddRequest{Fortune: *add})
		if err != nil {
			log.Fatalf("could not add: %v", err)
		}
		log.Printf("Added: %s", *add)
	}

	if *has != "" {
		r, err := c.Has(context.Background(), &pb.FortuneHasRequest{Fortune: *has})
		if err != nil {
			log.Fatalf("could not call has: %v", err)
		}
		if r.Has {
			log.Printf("Fortune found.")
		} else {
			log.Printf("Fortune not found.")
		}
	}
}
