package action

import (
	"context"

	"github.com/mudler/LocalAGI/core/types"
	"github.com/sashabaranov/go-openai/jsonschema"
)

const StateActionName = "update_state"

func NewState() *StateAction {
	return &StateAction{}
}

type StateAction struct{}

func (a *StateAction) Run(context.Context, types.ActionParams) (types.ActionResult, error) {
	return types.ActionResult{Result: "internal state has been updated"}, nil
}

func (a *StateAction) Plannable() bool {
	return false
}

func (a *StateAction) Definition() types.ActionDefinition {
	return types.ActionDefinition{
		Name:        StateActionName,
		Description: "update the agent state (short memory) with the current state of the conversation.",
		Properties: map[string]jsonschema.Definition{
			"goal": {
				Type:        jsonschema.String,
				Description: "The current goal of the agent.",
			},
			"doing_next": {
				Type:        jsonschema.String,
				Description: "The next action the agent will do.",
			},
			"done_history": {
				Type: jsonschema.Array,
				Items: &jsonschema.Definition{
					Type: jsonschema.String,
				},
				Description: "A list of actions that the agent has done.",
			},
			"now_doing": {
				Type:        jsonschema.String,
				Description: "The current action the agent is doing.",
			},
			"memories": {
				Type: jsonschema.Array,
				Items: &jsonschema.Definition{
					Type: jsonschema.String,
				},
				Description: "A list of memories to keep between conversations.",
			},
		},
	}
}
