#!/usr/bin/perl -w

use strict;
use Getopt::Long;
use File::Spec;
use File::Basename;
use Module::Load;
use Cwd qw(realpath);

my $info = 0;
my $debug = 0;
my %config = (
    mode => 'download',
    getter => 'filegetter',
    'plugin.youtube.QUALITY' => 'hd',
    'plugin.filegetter.FILEPATTERN' => './%3$s.flv',
);

sub link_callback {
    my $m = shift;

    if ($info) {
        foreach (keys(%{$m})) {
            printf("%s: %s\n", $_, defined($m->{$_})?$m->{$_}:'(undef)');
        }
        return 1;
    } else {
        print("Downloading $m->{'TITLE'}\n");
        return 0;
    }
}


GetOptions("i" => \$info, "d" => \$debug);

push(@INC, dirname(realpath($0)));
load 'libvideosite';

unless(libvideosite::register_api({
    config_init => sub {},
    config_save => sub {},
    config_get => sub { return $config{join(".", @{$_[0]})} },
    config_set => sub { $config{join(".", @{$_[0]})} = $_[1] },
    config_has => sub { exists($config{join(".", @{$_[0]})}) },
    config_del => sub { delete($config{join(".", @{$_[0]})}) },
    link_callback => \&link_callback,
    _debug => sub { return $debug },
})) {
    die("Error registering API: $libvideosite::error");
}

unless(libvideosite::init()) {
    die("Could not init libvideosite: $libvideosite::error");
}

foreach (@ARGV) {
    printf("Handling %s...\n", $_);
    libvideosite::check_for_link({
        message => $_,
        ewpf => sub { print @_, "\n" },
        window => "",
    });
}
