package v2migrator

import (
	"bytes"
	"encoding/json"
	"strings"
	"time"

	"github.com/pkg/errors"

	"github.com/Luzifer/twitch-bot/pkg/database"
	"github.com/Luzifer/twitch-bot/plugins"
)

type (
	storageModOverlays struct {
		ChannelEvents map[string][]struct {
			IsLive bool                     `json:"is_live"`
			Time   time.Time                `json:"time"`
			Type   string                   `json:"type"`
			Fields *plugins.FieldCollection `json:"fields"`
		} `json:"channel_events"`
	}
)

func (s storageModOverlays) migrate(db database.Connector) (err error) {
	for channel, evts := range s.ChannelEvents {
		for _, evt := range evts {
			buf := new(bytes.Buffer)
			if err = json.NewEncoder(buf).Encode(evt.Fields); err != nil {
				return errors.Wrap(err, "encoding fields")
			}

			if _, err = db.DB().Exec(
				`INSERT INTO overlays_events
					(channel, created_at, event_type, fields)
					VALUES ($1, $2, $3, $4);`,
				channel, evt.Time.UnixNano(), evt.Type, strings.TrimSpace(buf.String()),
			); err != nil {
				return errors.Wrap(err, "storing event to database")
			}
		}
	}

	return nil
}