// Copyright 2021 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Implements metadata_service.proto (see proto for details)
package main

import (
	"context"
	"log"
	"net"

	"go.chromium.org/chromiumos/config/go/build/api"
	"google.golang.org/grpc"
)

// MetadataServer implementation of metadata_service.proto
type MetadataServer struct {
	logger *log.Logger
}

// newMetadataServer creates a new metadata service server to listen to rpc requests.
func newMetadataServer(l net.Listener, logger *log.Logger) (*grpc.Server, error) {
	s := &MetadataServer{
		logger: logger,
	}
	server := grpc.NewServer()
	api.RegisterMetadataServiceServer(server, s)
	logger.Println("metadataservice listening to requests at ", l.Addr().String())
	return server, nil
}

func (s *MetadataServer) GetDeviceConfig(ctx context.Context,
	req *api.GetDeviceConfigRequest) (*api.GetDeviceConfigResponse, error) {
	s.logger.Println("Received api.GetDeviceConfig: ", *req)
	s.logger.Println("TODO(shapiroc): implement")
	return &api.GetDeviceConfigResponse{}, nil
}
