package ingest_test

import (
	_ "embed"
	"testing"

	"github.com/go-json-experiment/json"
	"github.com/google/go-cmp/cmp"

	"git.sunturtle.xyz/zephyr/kaiyan/ingest"
	"git.sunturtle.xyz/zephyr/kaiyan/twitch"
)

func TestTwitchDecode(t *testing.T) {
	cases := []struct {
		name string
		json string
		want ingest.Twitch
	}{
		{
			name: "message",
			json: twitchMessage,
			want: ingest.Twitch{
				Broadcaster: "1971641",
				Chatter:     "4145994",
				ID:          "cc106a89-1814-919d-454c-f4f2f970aae7",
				Message:     ingest.TwitchContent{Text: "Hi chat"},
			},
		},
		{
			name: "shared",
			json: twitchMessageShared,
			want: ingest.Twitch{
				Broadcaster:       "1971641",
				Chatter:           "4145994",
				ID:                "cc106a89-1814-919d-454c-f4f2f970aae7",
				Message:           ingest.TwitchContent{Text: "Hi chat"},
				SourceBroadcaster: "112233",
			},
		},
	}
	for _, c := range cases {
		t.Run(c.name, func(t *testing.T) {
			var got twitch.EventSub[ingest.Twitch]
			err := json.Unmarshal([]byte(c.json), &got)
			if err != nil {
				t.Errorf("couldn't decode message: %v", err)
			}
			if diff := cmp.Diff(c.want, got.Event); diff != "" {
				t.Errorf("wrong result (-want/+got):\n%s", diff)
			}
		})
	}
}

//go:embed testdata/twitch-message.json
var twitchMessage string

//go:embed testdata/twitch-message-shared.json
var twitchMessageShared string