class Embulk::LineGuessPlugin

def guess(config, sample)

def guess(config, sample)
  if config.fetch('parser', {}).fetch('charset', nil).nil?
    require 'embulk/guess/charset'
    charset_guess = Guess::CharsetGuessPlugin.new
    return charset_guess.guess(config, sample)
  end
  if config.fetch('parser', {}).fetch('newline', nil).nil?
    require 'embulk/guess/newline'
    newline_guess = Guess::NewlineGuessPlugin.new
    return newline_guess.guess(config, sample)
  end
  # TODO pure-ruby LineDecoder implementation?
  begin
    parser_task = config.param("parser", :hash, default: {}).load_config(Java::LineDecoder::DecoderTask)
  rescue
    # TODO log?
    p $!
    p $!.backtrace
    return DataSource.new
  end
  decoder = Java::LineDecoder.new(Java::ListFileInput.new([[sample.to_java]]), parser_task)
  sample_lines = []
  while decoder.nextFile
    while line = decoder.poll
      sample_lines << line
    end
    unless sample.end_with?(parser_task.getNewline.getString)
      sample_lines.pop unless sample_lines.empty? # last line is partial
    end
  end
  return guess_lines(config, sample_lines);
end

def guess_lines(config, sample_lines)

def guess_lines(config, sample_lines)
  raise NotImplementedError, "LineGuessPlugin#guess_lines(config, sample_lines) must be implemented"
end