#!/usr/bin/perl -w
use strict;

use YAML;
use Bookmarks;
use Getopt::Long;

GetOptions(
    'file|f=s' => \my $DBNAME,
    'tag=s' => \my @TAGS,
);

die "Usage: $0 --file <dbname> <command>\n" unless $DBNAME;

my $bookmarks = Bookmarks->new({
    dbname => $DBNAME,
});

my $command = shift;

my %action_for = (
    get => sub {
        my $identifier = shift;
        my $query = $identifier =~ /^\d+$/ ? { id => $identifier } : { uri => $identifier };
        my $bookmark = $bookmarks->get_bookmark($query);

        print $bookmark ? Dump($bookmark) : "Not Found\n";
    },
    add => sub {
        my ($uri, $title, @tags) = @_;
        my $bookmark = $bookmarks->add({ uri => $uri, title => $title, tags => \@tags });
        print Dump($bookmark);
    },
    list => sub {
        my @resources = $bookmarks->get_bookmarks({
            tag => \@TAGS
        });
        # TODO: list by tags, date, etc.
        # TODO: coordinate this commandline script with the CGI app
        print Dump(\@resources);
    },
    load => sub {
        my ($src_file) = @_;
        my $src_bookmarks = YAML::LoadFile($src_file);
        for my $bookmark (@{ $src_bookmarks }) {
            $bookmarks->add($bookmark);
        }
    },
);

$action_for{$command}->(@ARGV);

=begin

use YAML;

