class Ecu::ValuePrinter

def self.call(label)

def self.call(label)
  Terminal::Table.new(style: { alignment: :right }) do |t|
    case label
    when Kennfeld
      t << truncate(["y\\x"] + label.xvalue)
      t << :separator
      rows = label.yvalue.zip(label.value).map { |h, r| [h] + r }
      display_rows(rows).each do |row|
        t << truncate(row)
      end
    when Kennlinie
      t << truncate(["x"] + label.xvalue)
      t << :separator
      t << truncate(["y"] + label.value)
    when Stuetzstellenverteilung
      t << truncate(["x"] + label.xvalue)
    when Festwerteblock
      label.value.each do |row|
        t << truncate(row)
      end
    else
      fail "Cannot print value for #{label}"
    end
  end.to_s
end

def self.display_rows(rows)

def self.display_rows(rows)
  disp = rows.uniq
  return rows unless rows.size > 1 && disp.size < rows.size
  redundant_row = rows[0].map { "" }.tap { |r| r[0] = "..." }
  disp.unshift(redundant_row) if disp[0] == rows[1]
  disp.push(redundant_row) if disp[-1] == rows[-2]
  disp
end

def self.truncate(row, maxcols=10)

def self.truncate(row, maxcols=10)
  return row if row.length <= maxcols
  row[0..(maxcols - 1)] + ["..."]
end