# require deps
require 'tmpdir'
require 'fileutils'
require 'test/unit'
require 'shoulda'
require 'fileutils'
require 'timeout'
require 'logger'
require 'date'
require 'webmock/test_unit'

# require gem files
require File.dirname(__FILE__) + '/../lib/roo'

TESTDIR =  File.join(File.dirname(__FILE__), 'files')

LOG_DIR = File.join(File.dirname(__FILE__),'../log')
FileUtils.mkdir_p(LOG_DIR)

LOG_FILE = File.join(LOG_DIR,'roo_test.log')
$log = Logger.new(LOG_FILE)

#$log.level = Logger::WARN
$log.level = Logger::DEBUG

DISPLAY_LOG = false

# very simple diff implementation
# output is an empty string if the files are equal
# otherwise differences a printen (not compatible to
# the diff command)
def file_diff(fn1,fn2)
  result = ''
  File.open(fn1) do |f1|
    File.open(fn2) do |f2|
      while f1.eof? == false and f2.eof? == false
        line1 = f1.gets.chomp
        line2 = f2.gets.chomp
        result << "<#{line1}\n>#{line2}\n" if line1 != line2
      end
      if f1.eof? == false
        while f1.eof? == false
          line1 = f1.gets
          result << "<#{line1}\n"
        end
      end
      if f2.eof? == false
        while f2.eof? == false
          line2 = f2.gets
          result ">#{line2}\n"
        end
      end
    end
  end
  result
end

class File
  def File.delete_if_exist(filename)
    if File.exist?(filename)
      File.delete(filename)
    end
  end
end

class Test::Unit::TestCase
  def key_of(spreadsheetname)
    {
      #'formula' => 'rt4Pw1WmjxFtyfrqqy94wPw',
      'formula' => 'o10837434939102457526.3022866619437760118',
      #"write.me" => 'r6m7HFlUOwst0RTUTuhQ0Ow',
      "write.me" => '0AkCuGANLc3jFcHR1NmJiYWhOWnBZME4wUnJ4UWJXZHc',
      #'numbers1' => "rYraCzjxTtkxw1NxHJgDU8Q",
      'numbers1' => 'o10837434939102457526.4784396906364855777',
      #'borders' => "r_nLYMft6uWg_PT9Rc2urXw",
      'borders' => "o10837434939102457526.664868920231926255",
      #'simple_spreadsheet' => "r3aMMCBCA153TmU_wyIaxfw",
      'simple_spreadsheet' => "ptu6bbahNZpYe-L1vEBmgGA",
      'testnichtvorhandenBibelbund.ods' => "invalidkeyforanyspreadsheet", # !!! intentionally false key
      #"only_one_sheet" => "rqRtkcPJ97nhQ0m9ksDw2rA",
      "only_one_sheet" => "o10837434939102457526.762705759906130135",
      #'time-test' => 'r2XfDBJMrLPjmuLrPQQrEYw',
      'time-test' => 'ptu6bbahNZpYBMhk01UfXSg',
      #'datetime' => "r2kQpXWr6xOSUpw9MyXavYg",
      'datetime' => "ptu6bbahNZpYQEtZwzL_dZQ",
      'whitespace' => "rZyQaoFebVGeHKzjG6e9gRQ",
      'matrix' => '0AkCuGANLc3jFdHY3cWtYUkM4bVdadjZ5VGpfTzFEUEE',
    # 'numbers1' => "o10837434939102457526.4784396906364855777",
    # 'borders' => "o10837434939102457526.664868920231926255",
    # 'simple_spreadsheet' => "ptu6bbahNZpYe-L1vEBmgGA",
    # 'testnichtvorhandenBibelbund.ods' => "invalidkeyforanyspreadsheet", # !!! intentionally false key
    # "only_one_sheet" => "o10837434939102457526.762705759906130135",
    # "write.me" => 'ptu6bbahNZpY0N0RrxQbWdw&hl',
    # 'formula' => 'o10837434939102457526.3022866619437760118',
    # 'time-test' => 'ptu6bbahNZpYBMhk01UfXSg',
    # 'datetime' => "ptu6bbahNZpYQEtZwzL_dZQ",
    }.fetch(spreadsheetname)
  rescue KeyError
    raise "unknown spreadsheetname: #{spreadsheetname}"
  end

  def yaml_entry(row,col,type,value)
    "cell_#{row}_#{col}: \n  row: #{row} \n  col: #{col} \n  celltype: #{type} \n  value: #{value} \n"
  end
end