package entity

import (
	"gateway/internal/model/notification/domain/enum"

	"go.mongodb.org/mongo-driver/v2/bson"
)

// DLQDeliveryPayload holds non-PII metadata for admin inspection (target is not stored; use RetryDLQ with an explicit target).
type DLQDeliveryPayload struct {
	Locale           string         `bson:"locale"`
	Data             map[string]any `bson:"data,omitempty"`
	IdempotencyKey   string         `bson:"idempotency_key"`
	DoNotPersistBody bool           `bson:"do_not_persist_body,omitempty"`
}

// NotificationDLQ stores notifications that exceeded max retry attempts.
type NotificationDLQ struct {
	ID             bson.ObjectID       `bson:"_id,omitempty"`
	NotificationID string              `bson:"notification_id"`
	TenantID       string              `bson:"tenant_id"`
	UID            string              `bson:"uid,omitempty"`
	Channel        enum.Channel        `bson:"channel"`
	Kind           enum.NotifyKind     `bson:"kind"`
	TargetHash     string              `bson:"target_hash"`
	LastError      string              `bson:"last_error"`
	Attempts       int                 `bson:"attempts"`
	Payload        *DLQDeliveryPayload `bson:"payload,omitempty"`
	OccurredAt     *int64              `bson:"occurred_at,omitempty"`
	CreateAt       *int64              `bson:"create_at,omitempty"`
}

func (d *NotificationDLQ) CollectionName() string {
	return "notification_dlq"
}
