"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.listBuiltinPromptPresets = listBuiltinPromptPresets;
exports.loadDefaultPrompts = loadDefaultPrompts;
exports.buildPromptBundle = buildPromptBundle;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const config_1 = require("../config");
function readPromptFile(relativePath) {
    const filePath = path_1.default.resolve(config_1.PROMPTS_DIR, relativePath);
    if (!fs_1.default.existsSync(filePath)) {
        throw new Error(`Prompt file not found: ${filePath}`);
    }
    return fs_1.default.readFileSync(filePath, "utf-8").trim();
}
const BUILTIN_PROMPT_PRESETS = {
    normalizer_v1: {
        id: "default-normalizer-v1",
        name: "Стандартный пресет NDC v1",
        promptVersion: "normalizer_v1",
        schemaNotes: "Используется схема normalized_query_v1. Строго соблюдать enum/required поля.",
        files: {
            system: path_1.default.join("system", "default.txt"),
            developer: path_1.default.join("developer", "default.txt"),
            domain: path_1.default.join("domain", "default.txt"),
            fewshot: path_1.default.join("fewshot", "default.txt")
        }
    },
    normalizer_v1_1: {
        id: "default-normalizer-v1_1",
        name: "Стандартный пресет NDC v1.1",
        promptVersion: "normalizer_v1_1",
        schemaNotes: "v1.1: усиленная taxonomy intent/route и confidence policy. Используется схема normalized_query_v1 без дополнительных полей.",
        files: {
            system: path_1.default.join("system", "default.txt"),
            developer: path_1.default.join("developer", "normalizer_v1_1.txt"),
            domain: path_1.default.join("domain", "normalizer_domain_v1_1.txt"),
            fewshot: path_1.default.join("fewshot", "normalizer_fewshot_v1_1.txt")
        }
    },
    normalizer_v1_1_1: {
        id: "default-normalizer-v1_1_1",
        name: "Стандартный пресет NDC v1.1.1",
        promptVersion: "normalizer_v1_1_1",
        schemaNotes: "v1.1.1: surgical patch для period_close_risk, exact drilldown requires и anomaly route escalation. Схема normalized_query_v1 без изменений.",
        files: {
            system: path_1.default.join("system", "default.txt"),
            developer: path_1.default.join("developer", "normalizer_v1_1_1.txt"),
            domain: path_1.default.join("domain", "normalizer_domain_v1_1.txt"),
            fewshot: path_1.default.join("fewshot", "normalizer_fewshot_v1_1_1.txt")
        }
    },
    normalizer_v1_1_2: {
        id: "default-normalizer-v1_1_2",
        name: "Стандартный пресет NDC v1.1.2",
        promptVersion: "normalizer_v1_1_2",
        schemaNotes: "v1.1.2: точечный patch границы heavy_analytical vs period_close_risk + confidence guard на boundary кейсах. Схема normalized_query_v1 без изменений.",
        files: {
            system: path_1.default.join("system", "default.txt"),
            developer: path_1.default.join("developer", "normalizer_v1_1_2.txt"),
            domain: path_1.default.join("domain", "normalizer_domain_v1_1.txt"),
            fewshot: path_1.default.join("fewshot", "normalizer_fewshot_v1_1_2.txt")
        }
    },
    normalizer_v1_1_2_1: {
        id: "default-normalizer-v1_1_2_1",
        name: "РЎС‚Р°РЅРґР°СЂС‚РЅС‹Р№ РїСЂРµСЃРµС‚ NDC v1.1.2.1",
        promptVersion: "normalizer_v1_1_2_1",
        schemaNotes: "v1.1.2.1: stable prompt baseline v1.1.2 + accounting-review phrasing anchors for 30-case validation pack. РЎС…РµРјР° normalized_query_v1 Р±РµР· РёР·РјРµРЅРµРЅРёР№.",
        files: {
            system: path_1.default.join("system", "default.txt"),
            developer: path_1.default.join("developer", "normalizer_v1_1_2_1.txt"),
            domain: path_1.default.join("domain", "normalizer_domain_v1_1.txt"),
            fewshot: path_1.default.join("fewshot", "normalizer_fewshot_v1_1_2_1.txt")
        }
    },
    normalizer_v2: {
        id: "default-normalizer-v2",
        name: "РЎС‚Р°РЅРґР°СЂС‚РЅС‹Р№ РїСЂРµСЃРµС‚ NDC v2",
        promptVersion: "normalizer_v2",
        schemaNotes: "v2: decomposition-first pre-router. LLM returns fragments + scope + flags; deterministic routing happens in code. РЎС…РµРјР° normalized_query_v2.",
        files: {
            system: path_1.default.join("system", "default.txt"),
            developer: path_1.default.join("developer", "normalizer_v2.txt"),
            domain: path_1.default.join("domain", "normalizer_domain_v1_1.txt"),
            fewshot: path_1.default.join("fewshot", "normalizer_v2.txt")
        }
    },
    normalizer_v2_0_1: {
        id: "default-normalizer-v2_0_1",
        name: "Стандартный пресет NDC v2.0.1",
        promptVersion: "normalizer_v2_0_1",
        schemaNotes: "v2.0.1: clarification-threshold policy. Вопросы в контуре и с понятным route должны исполняться без лишних уточнений. Схема normalized_query_v2_0_1.",
        files: {
            system: path_1.default.join("system", "default.txt"),
            developer: path_1.default.join("developer", "normalizer_v2_0_1.txt"),
            domain: path_1.default.join("domain", "normalizer_domain_v1_1.txt"),
            fewshot: path_1.default.join("fewshot", "normalizer_v2_0_1.txt")
        }
    },
    normalizer_v2_0_2: {
        id: "default-normalizer-v2_0_2",
        name: "Стандартный пресет NDC v2.0.2",
        promptVersion: "normalizer_v2_0_2",
        schemaNotes: "v2.0.2: execution-state hardening + explicit route_status/no_route_reason. Схема normalized_query_v2_0_2.",
        files: {
            system: path_1.default.join("system", "default.txt"),
            developer: path_1.default.join("developer", "normalizer_v2_0_2.txt"),
            domain: path_1.default.join("domain", "normalizer_domain_v1_1.txt"),
            fewshot: path_1.default.join("fewshot", "normalizer_v2_0_2.txt")
        }
    }
};
function isPromptVersion(value) {
    return (value === "normalizer_v1" ||
        value === "normalizer_v1_1" ||
        value === "normalizer_v1_1_1" ||
        value === "normalizer_v1_1_2" ||
        value === "normalizer_v1_1_2_1" ||
        value === "normalizer_v2" ||
        value === "normalizer_v2_0_1" ||
        value === "normalizer_v2_0_2");
}
function resolvePromptVersion(requested) {
    if (isPromptVersion(requested)) {
        return requested;
    }
    if (isPromptVersion(config_1.DEFAULT_PROMPT_VERSION)) {
        return config_1.DEFAULT_PROMPT_VERSION;
    }
    return "normalizer_v2_0_2";
}
function loadBuiltinPreset(promptVersion) {
    const now = new Date().toISOString();
    const definition = BUILTIN_PROMPT_PRESETS[promptVersion];
    return {
        id: definition.id,
        name: definition.name,
        createdAt: now,
        updatedAt: now,
        prompt_version: definition.promptVersion,
        systemPrompt: readPromptFile(definition.files.system),
        developerPrompt: readPromptFile(definition.files.developer),
        domainPrompt: readPromptFile(definition.files.domain),
        schemaNotes: definition.schemaNotes,
        fewShotExamples: readPromptFile(definition.files.fewshot)
    };
}
function listBuiltinPromptPresets() {
    return Object.keys(BUILTIN_PROMPT_PRESETS).map((version) => loadBuiltinPreset(version));
}
function loadDefaultPrompts(promptVersion) {
    return loadBuiltinPreset(resolvePromptVersion(promptVersion));
}
function buildPromptBundle(input) {
    const selectedPromptVersion = resolvePromptVersion(input.promptVersion);
    const defaults = loadDefaultPrompts(selectedPromptVersion);
    const systemPrompt = (input.systemPrompt ?? defaults.systemPrompt).trim();
    const developerPrompt = (input.developerPrompt ?? defaults.developerPrompt).trim();
    const domainPrompt = (input.domainPrompt ?? defaults.domainPrompt).trim();
    const schemaNotes = (input.schemaNotes ?? defaults.schemaNotes ?? "").trim();
    const fewShotExamples = (input.fewShotExamples ?? defaults.fewShotExamples ?? "").trim();
    const prompt_version = (input.promptVersion ?? defaults.prompt_version).trim() || selectedPromptVersion;
    const sections = [developerPrompt, `Schema notes:\n${schemaNotes}`];
    if (fewShotExamples) {
        sections.push(`Few-shot examples:\n${fewShotExamples}`);
    }
    return {
        prompt_version,
        systemPrompt,
        developerPrompt,
        domainPrompt,
        schemaNotes,
        fewShotExamples,
        combinedDeveloperPrompt: sections.join("\n\n")
    };
}
