package main

import (
	"context"
	"fmt"
	"html"
	"strings"
)

// SmartBlockFunc renders a Smart Block by substituting {{field}} placeholders with content values.
func SmartBlockFunc(ctx context.Context, content map[string]any) string {
	// Get metadata
	meta, ok := content["_meta"].(map[string]any)
	if !ok {
		return renderEmptyState()
	}

	generations, ok := meta["generations"].([]any)
	if !ok || len(generations) == 0 {
		return renderEmptyState()
	}

	currentID, _ := meta["currentGenerationId"].(string)
	if currentID == "" {
		return renderEmptyState()
	}

	// Find the current generation
	var template string
	for _, gen := range generations {
		genMap, ok := gen.(map[string]any)
		if !ok {
			continue
		}
		if genMap["id"] == currentID {
			template, _ = genMap["template"].(string)
			break
		}
	}

	if template == "" {
		return renderEmptyState()
	}

	// Replace {{field}} placeholders with content values
	result := template
	for key, value := range content {
		// Skip meta fields
		if strings.HasPrefix(key, "_") {
			continue
		}

		placeholder := "{{" + key + "}}"
		var valueStr string

		switch v := value.(type) {
		case string:
			valueStr = html.EscapeString(v)
		case float64:
			valueStr = fmt.Sprintf("%v", v)
		case int:
			valueStr = fmt.Sprintf("%d", v)
		case bool:
			valueStr = fmt.Sprintf("%t", v)
		default:
			valueStr = fmt.Sprintf("%v", v)
		}

		result = strings.ReplaceAll(result, placeholder, valueStr)
	}

	return result
}

func renderEmptyState() string {
	return `<div class="smart-block-empty p-8 border-2 border-dashed border-gray-300 rounded-lg text-center text-gray-500">
		<p class="text-lg font-medium">Smart Block</p>
		<p class="text-sm">Use the editor to generate content with AI</p>
	</div>`
}
