#ifndef DIDACTYL_PROMPT_TEMPLATE_H
#define DIDACTYL_PROMPT_TEMPLATE_H

#include "cjson/cJSON.h"
#include "tools/tools.h"

#define PROMPT_TEMPLATE_MAX_SECTIONS 32
#define PROMPT_TEMPLATE_MAX_NAME_LEN 64
#define PROMPT_TEMPLATE_MAX_ROLE_LEN 16
#define PROMPT_TEMPLATE_MARKER "---template---"

typedef struct {
    char name[PROMPT_TEMPLATE_MAX_NAME_LEN];
    char role[PROMPT_TEMPLATE_MAX_ROLE_LEN];
    char* content_template;
    char* tool_name;
    char* tool_args;
    char* result_field;
    int limit;
    int skip_if_empty;
    char* provider_name;
    char* provider_content_template;
} prompt_template_section_t;

typedef struct {
    char* personality;
    prompt_template_section_t sections[PROMPT_TEMPLATE_MAX_SECTIONS];
    int section_count;
} prompt_template_t;

typedef void (*prompt_template_emit_hook_fn)(const char* section_name,
                                             int message_index,
                                             void* user_data);

int prompt_template_parse(const char* skill_content, prompt_template_t* out_template);

cJSON* prompt_template_build_messages(const prompt_template_t* tmpl,
                                      const char* provider_name,
                                      tools_context_t* tools_ctx,
                                      cJSON* dm_history_messages,
                                      int dm_history_default_limit,
                                      prompt_template_emit_hook_fn emit_hook,
                                      void* emit_hook_user_data);

void prompt_template_free(prompt_template_t* tmpl);

#endif