package service

import (
	"github.com/go-kit/kit/endpoint"
	"github.com/kolide/kolide/server/kolide"
	"golang.org/x/net/context"
)

type optionsResponse struct {
	Options []kolide.Option `json:"options,omitempty"`
	Err     error           `json:"error,omitempty"`
}

func (or optionsResponse) error() error { return or.Err }

func makeGetOptionsEndpoint(svc kolide.Service) endpoint.Endpoint {
	return func(ctx context.Context, request interface{}) (interface{}, error) {
		options, err := svc.GetOptions(ctx)
		if err != nil {
			return optionsResponse{Err: err}, nil
		}
		return optionsResponse{Options: options}, nil
	}
}

func makeModifyOptionsEndpoint(svc kolide.Service) endpoint.Endpoint {
	return func(ctx context.Context, request interface{}) (interface{}, error) {
		payload := request.(kolide.OptionRequest)
		opts, err := svc.ModifyOptions(ctx, payload)
		if err != nil {
			return optionsResponse{Err: err}, nil
		}
		return optionsResponse{Options: opts}, nil
	}
}
