#!/usr/bin/env ruby

require 'json'
require 'slop'

require File.expand_path('../earthquakes', __FILE__)


def main
  opts = Slop.parse(:help => true, :strict => true) do
    banner "#{File.basename(__FILE__)} [options]"
    on :L, :listall, 'List all available earthquake ids.'
    on :R, :listall_regions, 'List available earthquake regions.'
    on :M, :listall_magnitudes, 'List available earthquakes magnitudes.'
    on :r, :region=, 'Show earthquakes for region.'
    on :m, :magnitude_range=, 'Show earthquakes of magnitude in range, e.g. "1.1-2.9".'
    on :i, :eqid=, 'Show all available info for earthquake with id.'
  end

  if ARGV.length < 1
    puts opts
    return 2
  end

  earthquakes = Earthquakes.new

  if opts.listall?
    earthquakes.all_ids.each { |i| puts i }
    return 0
  end

  if opts.listall_regions?
    earthquakes.all_regions.sort.each { |r| puts r }
    return 0
  end

  if opts.listall_magnitudes?
    earthquakes.all_magnitudes.sort.each { |m| puts m }
    return 0
  end

  if opts[:region]
    puts "/* Earthquakes in region #{opts[:region]} */"

    results = []
    earthquakes.in_region(opts[:region]).each do |i|
      results << earthquakes.get_info(i)
    end

    puts JSON.pretty_generate(results)
    return 0
  end

  if opts[:magnitude_range]
    puts "/* Earthquakes with magnitude #{opts[:magnitude]} */"

    min_mag, max_mag = opts[:magnitude_range].split('-')

    results = []
    earthquakes.with_magnitude_in_range(min_mag, max_mag).each do |i|
      results << earthquakes.get_info(i)
    end

    puts JSON.pretty_generate(results)
    return 0
  end

  if opts[:eqid]
    puts "/* Earthquake with id of #{opts[:eqid]} */"
    puts JSON.pretty_generate(earthquakes.get_info(opts[:eqid]))
    return 0
  end

  return 1
end


if $0 == __FILE__
  exit(main)
end
