package userbehavior

import (
	"context"

	larkcard "github.com/larksuite/oapi-sdk-go/v3/card"
	ubent "github.com/tidbcloud/devops/entity/userbehavior"
)

type UBEvent interface {
	HandleUBEvent(ctx context.Context) error
	PreProcess(ctx context.Context) error
	ProcessTemplate(ctx context.Context, template string) (string, error)
	DefaultText(ctx context.Context) string
	PostProcess(ctx context.Context) error
	GetAvailableParams(ctx context.Context) []string
	GetUBEventType() ubent.UBEventTp
	CustomFilter(ctx context.Context, textFilter string) (bool, error)

	// BuildCustomCard returns a custom Lark card for this event
	// Returns (nil, nil) to use standard card rendering
	BuildCustomCard(ctx context.Context) (*larkcard.MessageCard, error)
}

var AvailableUBEvents = []UBEvent{
	&tenantPlanUBEvent{},
}

type UBEventQueue interface {
	Put(event interface{}) error
}

type ubEventQueue struct {
	ubCh chan UBEvent
}

func NewUBEventQueue() UBEventQueue {
	return &ubEventQueue{
		ubCh: make(chan UBEvent, 100),
	}
}

func (q *ubEventQueue) Put(e interface{}) error {
	return nil
}
