class BaseAgent {
    constructor(name) {
        if (this.constructor === BaseAgent) {
            throw new Error("Cannot instantiate abstract class BaseAgent");
        }
        this.name = name;
    }

    /**
     * The core execution method that all agents must implement.
     * @param {Object} config - The JSON configuration from the database.
     * @param {Object} payload - Event specific data.
     */
    async execute(config, payload) {
        throw new Error(`Agent ${this.name} must implement execute() method.`);
    }

    /**
     * Helper to mock LLM calls. In production, this would call OpenAI/Gemini.
     */
    async mockLLMCall(prompt, responseMocks) {
        console.log(`[${this.name}] Sending prompt to LLM...`);
        // Simulate network delay
        await new Promise(resolve => setTimeout(resolve, 800));
        
        // Pick a mock response based on keywords or return default
        const text = prompt.toLowerCase();
        for (const [keyword, mockResponse] of Object.entries(responseMocks)) {
            if (text.includes(keyword)) return mockResponse;
        }
        return responseMocks.default || "I cannot process this right now.";
    }
}

module.exports = BaseAgent;
