class App
  desc "List things, such as tasks or contexts"
  long_desc %(
  List a whole lot of things that you might be keeping track of 
  in your overall todo list.

  This is your go-to place or finding all of the things that you
  might have 
  stored in 
  your todo databases.
)

  command [:list] do |c|
    c.default_command :tasks

    c.desc "Show long form"
    c.switch [:l,:long]

    c.flag :required_flag, :required => true
    c.flag :required_flag2, :required => true

    c.desc "List tasks"
    c.long_desc %(
    Lists all of your tasks that you have, in varying orders, and
    all that stuff.  Yes, this is long, but I need a long description.
  )

    c.arg :task, [:optional, :multiple]
    c.command :tasks do |tasks|
      tasks.desc "blah blah crud x whatever"
      tasks.flag [:x], :must_match => Array

      tasks.flag :flag

      tasks.action do |global,options,args|
        puts options[:x].inspect
        puts "list tasks: #{args.join(',')}"
      end

      tasks.desc 'list open tasks'
      tasks.command :open do |open|
        open.desc "blah blah crud x whatever"
        open.flag [:x], :must_match => Array

        open.flag :flag

        open.example "todo list tasks open --flag=blah", desc: "example number 1"
        open.example "todo list tasks open -x foo"

        open.action do |global,options,args|
          puts "tasks open"
        end
      end

      tasks.default_desc 'list all tasks'
    end

    c.desc "List contexts"
    c.long_desc %(
    Lists all of your contexts, which are places you might be 
    where you can do stuff and all that.
  )
    c.command :contexts do |contexts|

      contexts.desc "Foobar"
      contexts.switch [:f,'foobar']

      contexts.desc "Blah"
      contexts.switch [:b]

      contexts.flag :otherflag

      contexts.action do |global,options,args|
        puts "list contexts: #{args.join(',')}"
      end
    end
  end
end
