module Corona
  class CLI
    MAX_DELETE = 1
    require 'corona'
    require 'slop'

    def run
      if @opts[:poll]
        Corona.new :cidr=>@opts[:poll]
      elsif @opts[:remove]
        remove_from_db @opts[:remove]
      else
        Corona.new
      end
    end

    private

    def initialize
      args, @opts = opts_parse
      @arg = args.shift
      CFG.debug = true if @opts[:debug]
    end

    def opts_parse
      opts = Slop.parse(:help=>true) do
        banner 'Usage: corona [options] [argument]'
        on 'd',  'debug',      'Debugging on'
        on 'p=', 'poll',       'Poll CIDR [argument]'
        on 'r=', 'remove',     'Remove [argument] from DB'
        on 'm=', 'max-delete', "Maximum number to detel, default #{MAX_DELETE}"
        on 's',  'simulate',   'Simulate, do not change DB'
      end
      [opts.parse!, opts]
    end

    def remove_from_db name
      max_del = @opts['max-delete'] ? @opts['max-delete'] : MAX_DELETE
      DB.new
      devs = DB::Device.filter(Sequel.like(:ptr, "%#{name}%")).all
      if devs.size > max_del.to_i
        puts 'Too many matching devices:'
        devs.each do |dev|
          puts '  %s (%s)' % [dev.ptr, dev.ip]
        end
        puts 'Be more specific'
      else
        puts 'Deleting records:'
        devs.each do |dev|
          puts '  %s (%s)' % [dev.ptr, dev.ip]
          dev.delete unless @opts[:simulate]
        end
      end
    end

  end
end