// SPDX-FileCopyrightText: Amolith <amolith@secluded.site>
//
// SPDX-License-Identifier: AGPL-3.0-or-later

// Package areas provides the list_areas_and_goals MCP tool.
package areas

import (
	"context"
	"fmt"
	"strings"

	"github.com/mark3labs/mcp-go/mcp"

	"git.sr.ht/~amolith/lunatask-mcp-server/tools/shared"
)

// Handler handles area-related MCP tool calls.
type Handler struct {
	areas []shared.AreaProvider
}

// NewHandler creates a new areas Handler.
func NewHandler(areas []shared.AreaProvider) *Handler {
	return &Handler{areas: areas}
}

// Handle handles the list_areas_and_goals tool call.
func (h *Handler) Handle(
	_ context.Context,
	_ mcp.CallToolRequest,
) (*mcp.CallToolResult, error) {
	var builder strings.Builder

	for _, area := range h.areas {
		fmt.Fprintf(&builder, "- %s: %s\n", area.GetName(), area.GetID())

		for _, goal := range area.GetGoals() {
			fmt.Fprintf(&builder, "  - %s: %s\n", goal.GetName(), goal.GetID())
		}
	}

	return &mcp.CallToolResult{
		Content: []mcp.Content{
			mcp.TextContent{
				Type: "text",
				Text: builder.String(),
			},
		},
	}, nil
}
