/**
 * @file TextInput.h
 * @author apio (cloudapio.eu)
 * @brief Base class for text inputs.
 *
 * @copyright Copyright (c) 2024, the Luna authors.
 *
 */

#pragma once
#include <luna/Buffer.h>
#include <os/Timer.h>
#include <ui/Widget.h>

namespace ui
{
    class TextInput : public Widget
    {
      public:
        TextInput();

        virtual Result<ui::EventResult> handle_key_event(const ui::KeyEventRequest& request) = 0;

        virtual Result<void> draw(ui::Canvas& canvas) = 0;

      protected:
        Buffer m_data;

        usize m_cursor { 0 };
        ui::Point m_cursor_position { 0, 0 };

        OwnedPtr<os::Timer> m_cursor_timer;
        bool m_cursor_activated = true;

        void tick_cursor();
        void update_cursor();

        Result<void> delete_current_character();
        Result<void> insert_character(char c);
    };
}