package main

import (
	"context"
	"go.temporal.io/sdk/temporal"
	"go.temporal.io/sdk/workflow"
	"time"
)

func RenderInvoiceActivity(ctx context.Context, id string) (string, error) {
	if err := ctx.Err(); err != nil {
		return "", err
	}
	s, err := render(id)
	if err != nil {
		return "", temporal.NewNonRetryableApplicationError(err.Error(), "InvalidOrder", err)
	}
	return s, nil
}

func InvoiceWorkflow(ctx workflow.Context, id string) (string, error) {
	ctx = workflow.WithActivityOptions(ctx, workflow.ActivityOptions{
		StartToCloseTimeout: time.Second,
		RetryPolicy:         &temporal.RetryPolicy{InitialInterval: time.Second, MaximumAttempts: 3},
	})
	var result string
	err := workflow.ExecuteActivity(ctx, RenderInvoiceActivity, id).Get(ctx, &result)
	return result, err
}
