package events

import (
	"log"
	"time"
)

type Model interface {
	GetModelName() string
	GetID() string
	GetSystem() string
}

func PublishModelEvent(p Publisher, m Model, action string) error {
	evt := Event{
		System:    m.GetSystem(),
		Model:     m.GetModelName(),
		ID:        m.GetID(),
		Action:    action,
		Data:      m,
		Timestamp: time.Now(),
	}
	err := p.Publish(evt.Model, evt)
	if err != nil {
		log.Printf("Error sending event: %#+v\n", err)
	}
	return err
}
