package util

import (
	"encoding/json"
	"testing"

	"github.com/stretchr/testify/require"
)

func TestRenderCard(t *testing.T) {
	t.Parallel()

	card := Card{
		Config: CardConfig{WideScreenMode: true},
		Header: CardHeader{
			Title: CardText{Tag: "plain_text", Content: "Thinking"},
			TextTagList: []CardTextTag{{
				Tag:   "text_tag",
				Text:  CardText{Tag: "plain_text", Content: "task-1"},
				Color: "blue",
			}},
			Template: "blue",
		},
		Elements: []CardElement{
			CardCollapsiblePanelElement{
				Tag:      "collapsible_panel",
				Expanded: false,
				Header: CardElementHeader{
					Title: CardText{Tag: "plain_text", Content: "Details"},
				},
				Elements: []CardElement{
					CardMarkdownElement{Tag: "markdown", Content: "## Content"},
				},
			},
			map[string]any{"tag": "hr"},
		},
	}

	rendered, err := RenderCard(card)
	require.NoError(t, err)

	var got map[string]any
	require.NoError(t, json.Unmarshal([]byte(rendered), &got))
	require.Equal(t, map[string]any{
		"config": map[string]any{"wide_screen_mode": true},
		"header": map[string]any{
			"title": map[string]any{"tag": "plain_text", "content": "Thinking"},
			"text_tag_list": []any{map[string]any{
				"tag":   "text_tag",
				"text":  map[string]any{"tag": "plain_text", "content": "task-1"},
				"color": "blue",
			}},
			"template": "blue",
		},
		"elements": []any{
			map[string]any{
				"tag":      "collapsible_panel",
				"expanded": false,
				"header": map[string]any{
					"title": map[string]any{"tag": "plain_text", "content": "Details"},
				},
				"elements": []any{map[string]any{"tag": "markdown", "content": "## Content"}},
			},
			map[string]any{"tag": "hr"},
		},
	}, got)
}

func TestRenderCardReturnsMarshalError(t *testing.T) {
	t.Parallel()

	_, err := RenderCard(Card{Elements: []CardElement{make(chan struct{})}})
	require.Error(t, err)
}
