#pragma once

#include "dialogue/DialogueOverlay.h"
#include "dialogue/DialogueRuntime.h"
#include <SDL.h>
#include <functional>
#include <string>

namespace ZL::Dialogue {

class DialogueSystem {
public:
	bool init(Renderer& renderer, const std::string& zipFile = "");
	bool loadDatabase(const std::string& path);

	void update(int deltaMs);
	void draw(Renderer& renderer);

	bool handleKeyDown(SDL_Keycode key);
	void handlePointerDown(float x, float y);
	void handlePointerMoved(float x, float y);
	bool handlePointerReleased(float x, float y);

	bool startDialogue(const std::string& dialogueId);
	bool startCutscene(const std::string& cutsceneId);
	void setOnCutsceneFinished(std::function<void(const std::string&)> cb);
	void stopDialogue();

	bool isActive() const { return runtime.isActive(); }
	bool blocksGameplayInput() const { return runtime.isActive(); }

	void setFlag(const std::string& name, int value) { runtime.setFlag(name, value); }
	int getFlag(const std::string& name) const { return runtime.getFlag(name); }

private:
	DialogueDatabase database;
	DialogueRuntime runtime;
	DialogueOverlay overlay;
};

} // namespace ZL::Dialogue
