package notification

import (
	"context"

	"github.com/0xJacky/Nginx-UI/model"
	"github.com/nikoksr/notify/service/bark"
	"github.com/uozi-tech/cosy/map2struct"
)

// @external_notifier(Bark)
type Bark struct {
	DeviceKey string `json:"device_key" title:"Device Key"`
	ServerURL string `json:"server_url" title:"Server URL"`
}

func init() {
	RegisterExternalNotifier("bark", func(ctx context.Context, n *model.ExternalNotify, msg *ExternalMessage) error {
		barkConfig := &Bark{}
		err := map2struct.WeakDecode(n.Config, barkConfig)
		if err != nil {
			return err
		}
		if barkConfig.DeviceKey == "" && barkConfig.ServerURL == "" {
			return ErrInvalidNotifierConfig
		}
		barkService := bark.NewWithServers(barkConfig.DeviceKey, barkConfig.ServerURL)
		return barkService.Send(ctx, msg.GetTitle(n.Language), msg.GetContent(n.Language))
	})
}
