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

package tools

import (
	"context"
	"fmt"
	"strings"

	"git.secluded.site/go-lunatask"
	"github.com/mark3labs/mcp-go/mcp"
)

// HandleListHabitsAndActivities handles the list_habits_and_activities tool call.
func (h *Handlers) HandleListHabitsAndActivities(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
	var b strings.Builder
	for _, habit := range h.config.Habits {
		fmt.Fprintf(&b, "- %s: %s\n", habit.GetName(), habit.GetID())
	}

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

// HandleTrackHabitActivity handles the track_habit_activity tool call.
func (h *Handlers) HandleTrackHabitActivity(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
	habitID, ok := request.Params.Arguments["habit_id"].(string)
	if !ok || habitID == "" {
		return reportMCPError("Missing or invalid required argument: habit_id")
	}

	performedOnStr, ok := request.Params.Arguments["performed_on"].(string)
	if !ok || performedOnStr == "" {
		return reportMCPError("Missing or invalid required argument: performed_on")
	}

	performedOn, err := lunatask.ParseDate(performedOnStr)
	if err != nil {
		return reportMCPError(fmt.Sprintf("Invalid format for performed_on: '%s'. Must be YYYY-MM-DD.", performedOnStr))
	}

	client := lunatask.NewClient(h.config.AccessToken)
	habitRequest := &lunatask.TrackHabitActivityRequest{
		PerformedOn: performedOn,
	}

	resp, err := client.TrackHabitActivity(ctx, habitID, habitRequest)
	if err != nil {
		return reportMCPError(fmt.Sprintf("Failed to track habit activity: %v", err))
	}

	return &mcp.CallToolResult{
		Content: []mcp.Content{
			mcp.TextContent{
				Type: "text",
				Text: fmt.Sprintf("Habit activity tracked successfully. Status: %s, Message: %s", resp.Status, resp.Message),
			},
		},
	}, nil
}
