package main

import (
	"bytes"
	"context"

	"git.dev.alexdunmow.com/block/core/blocks"
)

// FeaturesBlockMeta defines metadata for the features grid block.
var FeaturesBlockMeta = blocks.BlockMeta{
	Key:             "features",
	Title:           "Feature Cards",
	Description:     "Grid of feature cards with icons and descriptions",
	Source:          "gotham",
}

// FeaturesBlock renders a feature cards grid.
// Content expects: {"section_title": "...", "columns": 3, "features": [{"icon": "...", "title": "...", "description": "..."}]}
func FeaturesBlock(ctx context.Context, content map[string]any) string {
	items := getSlice(content, "features")
	if len(items) == 0 {
		return ""
	}

	var features []FeatureItem
	for _, item := range items {
		features = append(features, FeatureItem{
			Icon:        getString(item, "icon"),
			Title:       getString(item, "title"),
			Description: getString(item, "description"),
		})
	}

	data := FeaturesData{
		SectionTitle: getString(content, "section_title"),
		Columns:      getInt(content, "columns", 3),
		Features:     features,
	}

	var buf bytes.Buffer
	_ = featuresComponent(data).Render(ctx, &buf)
	return buf.String()
}

// FeaturesData contains data for the features component.
type FeaturesData struct {
	SectionTitle string
	Columns      int
	Features     []FeatureItem
}

// FeatureItem represents a single feature.
type FeatureItem struct {
	Icon        string
	Title       string
	Description string
}
