package funkin.ui.debug;

import funkin.util.MemoryUtil;
import openfl.text.TextFormat;
import openfl.system.System;
import openfl.text.TextField;

class MemoryCounter extends TextField
{
  var memPeak:Float = 0;

  static final BYTES_PER_MEG:Float = 1024 * 1024;
  static final ROUND_TO:Float = 1 / 100;

  public function new(x:Float = 10, y:Float = 10, color:Int = 0x000000)
  {
    super();

    this.x = x;
    this.y = y;
    this.width = 500;
    this.selectable = false;
    this.mouseEnabled = false;
    defaultTextFormat = new TextFormat("_sans", 12, color);
    text = "RAM: ";

    #if flash
    addEventListener(Event.ENTER_FRAME, function(e) {
      var time = Lib.getTimer();
      __enterFrame(time - currentTime);
    });
    #end
  }

  // Event Handlers
  @:noCompletion
  #if !flash override #end function __enterFrame(deltaTime:Float):Void
  {
    var mem:Float = Math.fround(MemoryUtil.getMemoryUsed() / BYTES_PER_MEG / ROUND_TO) * ROUND_TO;

    if (mem > memPeak) memPeak = mem;

    text = 'RAM: ${mem}mb / ${memPeak}mb';
  }
}