package models

import (
	"git.solsynth.dev/hypernet/pusher/pkg/pushkit"
	"gorm.io/datatypes"
	"time"
)

type Notification struct {
	BaseModel

	Topic    string            `json:"topic"`
	Title    string            `json:"title"`
	Subtitle string            `json:"subtitle"`
	Body     string            `json:"body"`
	Metadata datatypes.JSONMap `json:"metadata"`
	Priority int               `json:"priority"`
	SenderID *uint             `json:"sender_id"`

	Account   Account `json:"account"`
	AccountID uint    `json:"account_id"`

	ReadAt *time.Time `json:"read_at"`
}

func (v Notification) EncodeToPushkit() pushkit.Notification {
	return pushkit.Notification{
		Topic:    v.Topic,
		Title:    v.Title,
		Subtitle: v.Subtitle,
		Body:     v.Body,
		Metadata: v.Metadata,
		Priority: v.Priority,
	}
}

func NewNotificationFromPushkit(pk pushkit.Notification) Notification {
	return Notification{
		Topic:    pk.Topic,
		Title:    pk.Title,
		Subtitle: pk.Subtitle,
		Body:     pk.Body,
		Metadata: pk.Metadata,
		Priority: pk.Priority,
		SenderID: nil,
	}
}

const (
	NotifySubscriberFirebase = "firebase"
	NotifySubscriberAPNs     = "apple"
)

type NotificationSubscriber struct {
	BaseModel

	UserAgent   string `json:"user_agent"`
	Provider    string `json:"provider"`
	DeviceID    string `json:"device_id" gorm:"uniqueIndex"`
	DeviceToken string `json:"device_token"`

	Account   Account `json:"account"`
	AccountID uint    `json:"account_id"`
}