package main

import (
	"log"
	"math/rand"
	"net"

	"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 (
	port = ":50053"
)

var (
	fortunes = []string{
		"앞으로 소녀시대 직접 만날 거예요",
		"혼자 죽을 거예요",
		"오래살고 돈 많아 벌 거예요",
	}
	random = rand.New(rand.NewSource(99))
)

// TODO(krakauer): Add mutexes once the auth stuff works.

type server struct{}

func (s *server) Get(ctx context.Context, in *pb.FortuneGetRequest) (*pb.FortuneGetResponse, error) {
	return &pb.FortuneGetResponse{
		Fortune: fortunes[random.Intn(len(fortunes))],
	}, nil
}

func (s *server) Add(ctx context.Context, in *pb.FortuneAddRequest) (*pb.FortuneAddResponse, error) {
	fortunes = append(fortunes, in.Fortune)
	return &pb.FortuneAddResponse{Succeeded: true}, nil
}

func (s *server) Has(ctx context.Context, in *pb.FortuneHasRequest) (*pb.FortuneHasResponse, error) {
	for _, f := range fortunes {
		if f == in.Fortune {
			return &pb.FortuneHasResponse{Has: true}, nil
		}
	}
	return &pb.FortuneHasResponse{Has: false}, nil
}

func main() {
	lis, err := net.Listen("tcp", port)
	if err != nil {
		log.Fatalf("failed to listen: %v", err)
	}
	s := grpc.NewServer(grpc.Creds(&vgrpc.VanadiumCred{}))
	pb.RegisterFortuneServer(s, &server{})
	s.Serve(lis)
}
