// Code generated by ndpgen. DO NOT EDIT.
//
// This file contains export wrappers for the SchedulerCallback capability.
// It is intended for use in Navidrome plugins built with TinyGo.
//
//go:build wasip1

package scheduler

import (
	"github.com/navidrome/navidrome/plugins/pdk/go/pdk"
)

// SchedulerCallbackRequest is the request provided when a scheduled task fires.
type SchedulerCallbackRequest struct {
	// ScheduleID is the unique identifier for this scheduled task.
	// This is either the ID provided when scheduling, or an auto-generated UUID if none was specified.
	ScheduleID string `json:"scheduleId"`
	// Payload is the payload data that was provided when the task was scheduled.
	// Can be used to pass context or parameters to the callback handler.
	Payload string `json:"payload"`
	// IsRecurring is true if this is a recurring schedule (created via ScheduleRecurring),
	// false if it's a one-time schedule (created via ScheduleOneTime).
	IsRecurring bool `json:"isRecurring"`
}

// Scheduler is the marker interface for scheduler plugins.
// Implement one or more of the provider interfaces below.
// SchedulerCallback provides scheduled task handling.
// This capability allows plugins to receive callbacks when their scheduled tasks execute.
// Plugins that use the scheduler host service must implement this capability
// to handle task execution.
type Scheduler interface{}

// CallbackProvider provides the OnCallback function.
type CallbackProvider interface {
	OnCallback(SchedulerCallbackRequest) error
} // Internal implementation holders
var (
	callbackImpl func(SchedulerCallbackRequest) error
)

// Register registers a scheduler implementation.
// The implementation is checked for optional provider interfaces.
func Register(impl Scheduler) {
	if p, ok := impl.(CallbackProvider); ok {
		callbackImpl = p.OnCallback
	}
}

// NotImplementedCode is the standard return code for unimplemented functions.
// The host recognizes this and skips the plugin gracefully.
const NotImplementedCode int32 = -2

//go:wasmexport nd_scheduler_callback
func _NdSchedulerCallback() int32 {
	if callbackImpl == nil {
		// Return standard code - host will skip this plugin gracefully
		return NotImplementedCode
	}

	var input SchedulerCallbackRequest
	if err := pdk.InputJSON(&input); err != nil {
		pdk.SetError(err)
		return -1
	}

	if err := callbackImpl(input); err != nil {
		pdk.SetError(err)
		return -1
	}

	return 0
}
