#!/usr/bin/env ruby

# TODO: 
# - make code comments rdoc-compatible.
# - check sanity of listconfig-value like 'myaddr', 'default_mime' etc. 
#   We need them to be properly set to process properly.
# - primary setup-check / is there a valid list-config?/admin?/
#   admin-key?

def usage
  puts "Usage:
#{File.basename($0)} listname < email
#{File.basename($0)} -test [listname]"
  exit 1
end

def process_test(arg)
    usage unless STDIN.tty?
    listname = ARGV.shift
    if listname
      Schleuder.log.debug "Calling Processor.test(#{listname})"
      Schleuder::Processor.test listname
    else
      Schleuder.log.debug "Calling Processor.test"
      Schleuder::Processor.test
    end
end

def process_list(listname)
  usage if STDIN.tty? or ! listname
  Schleuder.log.debug "Running for list #{listname}"
  Schleuder.log.debug 'Reading STDIN'
  # TODO: check for valid IO
  msg = STDIN.read
  Schleuder.log.debug 'Handing over to Processor.run'
  Schleuder::Processor.run listname, msg
end

$:.unshift File.dirname(__FILE__) + '/../lib'
require 'schleuder'
begin 
  Schleuder.log.debug "I've been called, starting up..."

  arg = ARGV.shift
  if arg == '-test'
    process_test(ARGV)
  elsif arg =~ /[A-Za-z0-9]+/ 
    process_list(arg.gsub(/-(sendkey|bounces)$/, ''))
  else
    usage
  end
rescue SystemExit => e
  exit e.status
rescue Exception => e
  Schleuder.log.fatal e rescue puts e.inspect 
  exit 1
end
