#pragma once
#include <string_view>
#include <SFML/Graphics.hpp>
#include <codecvt>
#include <functional>

typedef std::function<void(sf::Color bgcolor, sf::Color color)> ColorCB;

typedef std::function<void(wchar_t ch)> WriteCB;

class ANSIParser {
  sf::Color $default_fg;
  sf::Color $default_bg;
  std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> $converter;

public:
  ANSIParser(sf::Color default_fg, sf::Color default_bg);

  // disable copying
  ANSIParser(ANSIParser& ap) = delete;

  bool parse(std::wstring_view codes, ColorCB color_cb, WriteCB write_cb);
};
