#!/usr/bin/env perl

use strict;

use Sparrow::Constants;
use Sparrow::Commands::Plugin;
use Sparrow::Commands::Project;
use Sparrow::Commands::Swat;
use Sparrow::Misc;
use Carp;

unless (@ARGV) {
    usage();
    exit;
}

my $object = shift @ARGV;

# initialization part 

init_sparrow_env();

if ($object eq  'plg'){

    my $action = shift @ARGV;

    if ( $action eq 'list') {

        my $options = join ' ', @ARGV;

        if ($options =~ /--local/){
            show_local_plugins();
        } else {
            show_plugins();
        }

    } elsif ( $action eq 'install'){

        install_plugin( shift @ARGV );        

    } elsif( $action  eq 'update'){

        update_plugin( shift @ARGV );        

    } elsif( $action  eq 'remove'){

        remove_plugin( shift @ARGV );        

    } elsif ( $action  eq 'info'){

        show_plugin( shift @ARGV );        

    } else { # default plugin action

        show_plugin( shift @ARGV );        

    }
} elsif ($object eq  'project'){

    my $name = shift @ARGV;

    my $action = shift @ARGV;

    if ( $action eq 'create') {

        create_project($name);

    } elsif ( $action eq 'remove') {

        remove_project($name);

    } elsif ( $action eq 'add_site' ){

        my $sid = shift @ARGV;
        my $base_url = shift @ARGV;

        add_site_to_project($name, $sid, $base_url);

    } elsif( $action  eq 'add_plg'){

        add_plugin_to_project($name,shift @ARGV);

    } elsif( $action  eq 'info'){

        project_info($name);

    } elsif( $action  eq 'check_site'){

        my $sid = shift @ARGV;
        my $pid = shift @ARGV;

        check_site($name,$sid,$pid);

    } elsif( $action  eq 'swat_setup'){

        my $sid = shift @ARGV;

        swat_setup($name,$sid);

    } else { # default project action

        project_info($name);

    };

} elsif ( $object eq 'projects' ){

    show_projects();

} else {
    confess "unknown command: $object @ARGV";
}

