package template

var (
	HandlerSRV = `package handler

import (
	"context"

	log "go-micro.dev/v6/logger"

	pb "{{.Dir}}/proto"
)

type {{title .Alias}} struct{}

// Return a new handler.
func New() *{{title .Alias}} {
	return &{{title .Alias}}{}
}

// Call greets a person by name and returns a welcome message.
//
// @example {"name": "Alice"}
func (e *{{title .Alias}}) Call(ctx context.Context, req *pb.Request, rsp *pb.Response) error {
	log.Info("Received {{title .Alias}}.Call request")
	rsp.Msg = "Hello " + req.Name
	return nil
}

// Stream sends a sequence of numbered responses back to the caller.
// Use this for streaming large result sets or real-time updates.
//
// @example {"count": 5}
func (e *{{title .Alias}}) Stream(ctx context.Context, req *pb.StreamingRequest, stream pb.{{title .Alias}}_StreamStream) error {
	log.Infof("Received {{title .Alias}}.Stream request with count: %d", req.Count)

	for i := 0; i < int(req.Count); i++ {
		log.Infof("Responding: %d", i)
		if err := stream.Send(&pb.StreamingResponse{
			Count: int64(i),
		}); err != nil {
			return err
		}
	}

	return nil
}
`

	// HandlerNoProto is the default handler: plain Go request/response types
	// registered by reflection. No generated protobuf code, so no protoc.
	HandlerNoProto = `package handler

import (
	"context"

	log "go-micro.dev/v6/logger"
)

// Request is the input to {{title .Alias}}.Call.
type Request struct {
	Name string ` + "`json:\"name\" description:\"Name to greet (required)\"`" + `
}

// Response is the output of {{title .Alias}}.Call.
type Response struct {
	Msg string ` + "`json:\"msg\"`" + `
}

type {{title .Alias}} struct{}

// Return a new handler.
func New() *{{title .Alias}} {
	return &{{title .Alias}}{}
}

// Call greets a person by name and returns a welcome message.
//
// @example {"name": "Alice"}
func (e *{{title .Alias}}) Call(ctx context.Context, req *Request, rsp *Response) error {
	log.Info("Received {{title .Alias}}.Call request")
	rsp.Msg = "Hello " + req.Name
	return nil
}
`

	SubscriberSRV = `package subscriber

import (
	"context"
	log "go-micro.dev/v6/logger"

	pb "{{.Dir}}/proto"
)

type {{title .Alias}} struct{}

func (e *{{title .Alias}}) Handle(ctx context.Context, msg *pb.Message) error {
	log.Info("Handler Received message: ", msg.Say)
	return nil
}

func Handler(ctx context.Context, msg *pb.Message) error {
	log.Info("Function Received message: ", msg.Say)
	return nil
}
`
)
