#pragma once
#include <stdint.h>

namespace debug
{
    void init();
    void show();
    void focus();
    void hide();

    void pause();
    void stop();
    void cont();
    const bool debugging();
    const bool paused();
    void setmemmodified(const uint16_t addr);

    void refresh();
    void sendToConsole(const char* text);
    void sendToConsoleLog(const char *text);
    void sendMoreToConsoleLog(const char *text);
    void DeleteCharConsole();
    void executeConsole();

    const bool isbreak(const uint16_t address, const uint8_t type=1);
    uint32_t next();
    uint32_t stepout();

    void savestate(const char *filename);
    void loadstate(const char *filename);

    void loadngo(const char* filename, const char* addr);

    void setcursor(const uint16_t address);
    void cursorfwd();
    void cursorback();

    void useOpcode(const uint8_t opcode, const uint8_t base);
    void clearUsedOpcodes();
    void markUsedOpcodes();
    const int getNumOpcodesUsed();
    void printOpcodesUsed();

    void search(const char *seq=nullptr);
    
    namespace history
    {
        void store();
        void gototop();
        void goforward();
        void goback();
    }
}