class Makit::TaskInfo

def self.infer_task_name

def self.infer_task_name
  #Rake.application.current_scope.join(":") rescue "unknown"

end

def self.slowest_task_name

def self.slowest_task_name
  if @completed_tasks.empty?
    return "unknown"
  end
  @completed_tasks.max_by { |task_name, task_info| task_info[:duration] }[0]
end

def self.track(task_name)


end
# generate code
Makit::TaskInfo.track(:generate) do

usage:

block-yielding initializer
def self.track(task_name)
  task = new(task_name)
  Makit::SHOW.task(task_name)
  yield(task)
ensure
  task.report_and_store_time_taken if task
end

def self.track_inferred


Block-yielding initializer with inferred task name
def self.track_inferred
  task_name = infer_task_name
  Makit::SHOW.task(task_name)
  track(task_name) { |task| yield(task) }
end

def initialize(task_name)

def initialize(task_name)
  @task_name = task_name
  @artifacts_dir = File.join("artifacts", task_name.to_s.gsub(":", "_"))
  @start_time = Time.now
  #at_exit { report_and_store_time_taken }

end

def report_and_store_time_taken

def report_and_store_time_taken
  @end_time = Time.now
  duration = @end_time - @start_time
  # leverate the Makit::Humanize.get_humanized_duration method

  humanized_duration = Makit::Humanize.get_humanized_duration(duration)
  puts "  #{@task_name} completed in #{humanized_duration}".colorize(:grey)
  #puts "[TaskGuard] Task '#{@task_name}' completed in #{duration}."

  # Add to class-level storage

  self.class.completed_tasks[@task_name] = {
    start_time: @start_time,
    end_time: @end_time,
    duration: duration,
  }
end