#pragma once

#include <string>

#include "r1_voice/llm.hh"
#include "r1_voice/stt.hh"
#include "r1_voice/tts.hh"
#include "r1_voice/vision_context.hh"

namespace r1_voice {

struct ConversationConfig {
    SttConfig stt;
    LlmConfig llm;
    TtsConfig tts;
    VisionConfig vision;
};

class Conversation {
public:
    explicit Conversation(
        ConversationConfig config
    );

    bool init(
        const std::string& network_interface
    );

    void run();

private:
    ConversationConfig config_;

    SpeechToText stt_;
    LLM llm_;
    TextToSpeech tts_;
    VisionContext vision_;
};

} // namespace r1_voice
