#!/usr/bin/env ruby

require 'cowsay'
require 'optparse'

options = {}
OptionParser.new do |opts|
  opts.banner = "Usage: cowsay [-h] [-f cowfile] [-l] [message]"
  opts.on("-l", "List available cow files") do |cowfile|
    options['list'] = true
  end
  opts.on("-f COWFILE", "Specify a cow file") do |cowfile|
    options['cowfile'] = cowfile
  end
end.parse!

if options['list']
  puts "Cow files:"
  puts Cowsay.character_classes.join(' ') 
else
  if ARGV.any?
    message = ARGV.join(' ')
  else
    #retrieve any piped input, otherwise use the empty string.
    message = STDIN.tty? ? '' : ARGF.read.chomp
  end
  puts Cowsay.say(message, options['cowfile'])
end
