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

package tasks

// CreateToolDescription describes the create_task tool for LLMs.
const CreateToolDescription = `Creates a new task in Lunatask.
WORKFLOW: First read the areas resource to identify valid area_id and goal_id values,
then use get_timestamp if scheduling the task. Only include optional parameters if
the user indicates or hints at them. Try to interpret speech-to-text input that
may not be entirely accurate.`

// UpdateToolDescription describes the update_task tool for LLMs.
const UpdateToolDescription = `Updates an existing task. Only provided fields will be updated.
WORKFLOW: Read the areas resource first if changing area/goal,
then use get_timestamp if changing schedule. Only include parameters that are being changed.
Empty strings will clear existing values for text fields.`

// DeleteToolDescription describes the delete_task tool for LLMs.
const DeleteToolDescription = `Permanently deletes an existing task from Lunatask.
This action cannot be undone.`

// ParamTaskID describes the task_id parameter.
const ParamTaskID = `ID of the task to update.`

// ParamDeleteTaskID describes the task_id parameter for delete.
const ParamDeleteTaskID = `ID of the task to delete.
This must be a valid task ID from an existing task in Lunatask.`

// ParamAreaID describes the area_id parameter for create.
const ParamAreaID = `Area ID in which to create the task.
Must be a valid area_id from the areas resource.`

// ParamUpdateAreaID describes the area_id parameter for update.
const ParamUpdateAreaID = `New Area ID for the task.
Must be a valid area_id from the areas resource.
Only include if moving the task to a different area.
If omitted, the task will remain in its current area.`

// ParamGoalID describes the goal_id parameter for create.
const ParamGoalID = `Optional goal ID to associate the task with.
Must be a valid goal_id from the areas resource that belongs to the specified area.
Only include if the task relates to a specific goal.`

// ParamUpdateGoalID describes the goal_id parameter for update.
const ParamUpdateGoalID = `New Goal ID for the task.
Must be a valid goal_id from the areas resource that belongs to the task's area
(current or new). Only include if changing the goal association.`

// ParamName describes the name parameter.
const ParamName = `Plain text task name using sentence case.`

// ParamUpdateName describes the name parameter for update.
const ParamUpdateName = `New plain text task name using sentence case.
Sending an empty string WILL clear the name.`

// ParamNote describes the note parameter for create.
const ParamNote = `Additional details or notes for the task, using Markdown formatting.
Include any extra context, requirements, or information provided by the user
that doesn't fit in the task name.`

// ParamUpdateNote describes the note parameter for update.
const ParamUpdateNote = `New note for the task, using Markdown formatting.
Sending an empty string WILL clear the existing note.
Only include if changing the task notes.`

// ParamEstimate describes the estimate parameter for create.
const ParamEstimate = `Estimated completion time in minutes (0-720, max 12 hours).
Only include if user mentions a time estimate like '30 minutes' (pass 30)
or '2 hours' (pass 120). Omit if no estimate is provided.`

// ParamUpdateEstimate describes the estimate parameter for update.
const ParamUpdateEstimate = `New estimated completion time in minutes (0-720, max 12 hours).
Only include if user mentions changing the time estimate.
Note: update_task has a lower maximum than create_task.`

// ParamPriority describes the priority parameter for create.
const ParamPriority = `Task priority level.
Valid values: 'lowest', 'low', 'neutral', 'high', 'highest'.
Only include if user explicitly mentions priority or urgency.
Omit for normal tasks.`

// ParamUpdatePriority describes the priority parameter for update.
const ParamUpdatePriority = `New task priority level.
Valid values: 'lowest', 'low', 'neutral', 'high', 'highest'.
Only include if user wants to change the priority.`

// ParamMotivation describes the motivation parameter for create.
const ParamMotivation = `Level of importance for the task.
Valid values: 'must' (critical/required), 'should' (important), 'want' (nice-to-have).
Only include if the user's language suggests strong obligation
('I need to', 'I have to') vs preference ('I'd like to', 'I want to').`

// ParamUpdateMotivation describes the motivation parameter for update.
const ParamUpdateMotivation = `New level of importance for the task.
Valid values: 'must' (critical/required), 'should' (important), 'want' (nice-to-have),
or empty string to clear. Only include if changing the motivation level.`

// ParamEisenhower describes the eisenhower parameter for create.
const ParamEisenhower = `Eisenhower Matrix quadrant for task prioritization.
Valid values: 'do-now' (urgent+important), 'delegate' (urgent, not important),
'do-later' (important, not urgent), 'eliminate' (neither), 'uncategorized'.
Only include for areas which the user has indicated follow the Eisenhower workflow.`

// ParamUpdateEisenhower describes the eisenhower parameter for update.
const ParamUpdateEisenhower = `New Eisenhower Matrix quadrant for task prioritization.
Valid values: 'do-now' (urgent+important), 'delegate' (urgent, not important),
'do-later' (important, not urgent), 'eliminate' (neither), 'uncategorized'.
Only include for areas which the user has indicated follow the Eisenhower workflow.`

// ParamStatus describes the status parameter for create.
const ParamStatus = `Initial task status.
Valid values: 'later' (someday/backlog), 'next' (upcoming/soon),
'started' (in progress), 'waiting' (blocked), 'completed' (finished).
Infer from context: 'working on' = 'started', 'soon'/'upcoming' = 'next',
'blocked'/'waiting for' = 'waiting'.
Omit for normal new tasks (defaults to appropriate status).`

// ParamUpdateStatus describes the status parameter for update.
const ParamUpdateStatus = `New task status.
Valid values: 'later' (someday/backlog), 'next' (upcoming/soon),
'started' (in progress), 'waiting' (blocked), 'completed' (finished),
or empty string to clear. Only include if changing the task status.`

// ParamScheduledOn describes the scheduled_on parameter for create.
const ParamScheduledOn = `Scheduled date/time for the task.
Must use the formatted timestamp returned by get_timestamp tool.
Only include if user specifies when the task should be done.`

// ParamUpdateScheduledOn describes the scheduled_on parameter for update.
const ParamUpdateScheduledOn = `New scheduled date/time for the task.
Must use the formatted timestamp returned by get_timestamp tool.
Sending an empty string might clear the scheduled date.
Only include if changing the schedule.`
