/*
 * TerminalFrontend - couples TerminalInputHandler + TerminalRenderer and owns ncurses lifecycle
 */
#pragma once
#include <termios.h>
#include <signal.h>

#include "Frontend.h"
#include "TerminalInputHandler.h"
#include "TerminalRenderer.h"


class TerminalFrontend final : public Frontend {
public:
	TerminalFrontend() = default;

	~TerminalFrontend() override = default;

	// Configurable ESC key delay (ms) for ncurses' set_escdelay().
	// Controls how long ncurses waits to distinguish ESC vs. meta sequences.
	// Adjust if your terminal needs a different threshold.
	static constexpr int kEscDelayMs = 50;

	bool Init(int &argc, char **argv, Editor &ed) override;

	void Step(Editor &ed, bool &running) override;

	void Shutdown() override;

private:
	TerminalInputHandler input_{};
	TerminalRenderer renderer_{};
	int prev_r_ = 0;
	int prev_c_ = 0;
	// Saved terminal attributes to restore on shutdown
	bool have_orig_tio_ = false;
	struct termios orig_tio_{};
	// Saved SIGINT handler to restore on shutdown
	bool have_old_sigint_ = false;
	struct sigaction old_sigint_{};
};
