#!/usr/bin/env perl

use strict;
use warnings;

use File::Basename 'dirname';
use File::Spec::Functions qw/catdir splitdir/;
use Getopt::Long qw/GetOptions :config no_auto_abbrev no_ignore_case/;

# Source directory has precedence
my @base = (splitdir(dirname(__FILE__)), '..');
my $lib = join('/', @base, 'lib');
-e catdir(@base, 't') ? unshift(@INC, $lib) : push(@INC, $lib);

# Check if Mojolicious is installed
die <<EOF unless eval 'use Mojo::Server::Morbo; 1';
It looks like you don't have the Mojolicious framework installed.
Please visit http://mojolicio.us for detailed installation instructions.

EOF

# "Welcome to 'Entertainment And Earth Invasion Tonite'.
#  Across the galaxy my people are completing the mighty space fleet that
#  will exterminate the human race!
#  But first, this news from Tinseltown."
my ($help, @listen, @watch);
GetOptions(
  'h|help' => sub { $help = 1 },
  'l|listen=s' => \@listen,
  'v|verbose'  => sub { $ENV{MORBO_VERBOSE} = 1 },
  'w|watch=s'  => \@watch
);
$help = 1 unless my $app = shift;

# Usage
die <<"EOF" if $help;
usage: $0 [OPTIONS] [APPLICATION]

  morbo script/myapp
  morbo myapp.pl
  morbo -w /usr/local/lib -w public myapp.pl

These options are available:
  -h, --help                     Show this message.
  -l, --listen <location>        Set one or more locations you want to listen
                                 on, defaults to the value of MOJO_LISTEN or
                                 "http://*:3000".
  -v, --verbose                  Print details about what files changed to
                                 STDOUT.
  -w, --watch <directory/file>   Set one or more directories and files to
                                 watch for changes, defaults to the
                                 application script as well as the "lib" and
                                 "templates" directories in the current
                                 working directory.
EOF

# "With Halley's Comet out of ice, Earth is experiencing a sudden case of
#  global warming.
#  Morbo is pleased but sticky."
$ENV{MOJO_LISTEN} = join(',', @listen) if @listen;
my $morbo = Mojo::Server::Morbo->new;
$morbo->watch(\@watch) if @watch;
$morbo->run($app);

__END__

=head1 NAME

morbo - Morbo HTTP 1.1 and WebSocket development server

=head1 SYNOPSIS

  $ morbo --help
  $ morbo myapp.pl

=head1 DESCRIPTION

Start L<Mojolicious> and L<Mojolicious::Lite> applications with the
L<Mojo::Server::Morbo> web server.

=head1 SEE ALSO

L<Mojolicious>, L<Mojolicious::Guides>, L<http://mojolicio.us>.

=cut
