#!/usr/bin/perl

use strict;
use warnings;
use Finance::QuoteDB;
use Finance::QuoteDB::Schema;
use Getopt::Long qw(:config);
use Config::IniFiles;
use Pod::Usage;
use Log::Log4perl qw(:easy);

=head1 NAME

fqdb - Manage quote databases

=head1 SYNOPSIS

fqdb [options] command

=head1 DESCRIPTION

This script is the command-line interface to the Finance::QuoteDB
module.

=head1 COMMANDS

  createdb      Creates a new database
  addstock      Add stocks to database
  delstock      Remove stocks from a database
  updatedb      Updates a database
  backpopulate  Retrieves history quotes and put them in the database
  getquote      Retrieves and outputs quotes from the database

=head1 OPTIONS

  -h --help     Shows help
  --dsn         Which database to use. Defaults to 'dbi:SQLite:fqdb.db'.
                format = 'dbi:$dbType:dbname=$dbname;host=$host;port=$port'
  --dsnuser     Username if needed for dsn
  --dsnpassword Password if needed for dsn
  --market      Market from which stocks should be treated
  --stocks      Stock list (comma separated) use [] to specify your own ID
                i.e. GOOG[GOOGLE]
  --startdate   startdate for usage with backpopulate and getquote defaults to '1900-01-01'
  --enddate     enddate for usage with backpopulate and getquote defaults to '' (today)
  --overwrite   indicates if updates should overwrite previously saved data.
                Defaults to yes. Only works for backpopulate for now...
  -v --version  Returns version number of Finance::QuoteDB

=head1 EXAMPLES

=head2 fqdb createdb --dsn='dbi:SQLite:quotes.db'

=head2 fqdb createdb --dsn='dbi:SQLite:dbname=quotes.db'

Creates a new database in the current directory called quotes.db of
type SQLite.

=head2 fqdb updatedb --dsn='dbi:SQLite:quotes.db'

Updates the database quotes.db with new quotes if available.

=cut

# enable debug logging to a file
Log::Log4perl->easy_init( { level   => $DEBUG,
#                            file    => ">>fqdb.log"
                          });

my $dsn = 'dbi:SQLite:fqdb.db';
my $dsnuser = '';
my $dsnpasswd = '';
my $market = '';
my $stocks = '';
my $overwrite = 1 ; # overwrite existing data by default
my $startdate = '1900-01-01' ;
my $enddate = '' ;

license();

GetOptions(
  'dsn=s'                    => \$dsn,
  'dsnuser=s'                => \$dsnuser,
  'dsnpassword|dsnpasswd=s'  => \$dsnpasswd,
  'market=s'                 => \$market,
  'stocks=s'                 => \$stocks,
  'startdate=s'             => \$startdate,
  'enddate=s'               => \$enddate,
  'overwrite!'               => \$overwrite,
  'h|help'                   => sub { pod2usage(1); },
  'c|w'                      => sub { INFO ("Please read the LICENSE file\n") },
  'v|version'                => sub { INFO ("Finance::QuoteDB version is ".Finance::QuoteDB->VERSION."\n") ;
                                      INFO ("Finance::Quote version is ".Finance::Quote->VERSION."\n") }
) or pod2usage(2);

my $command = shift(@ARGV)||'';

if ($command) {
  my $fqdb = Finance::QuoteDB->new({dsn=>$dsn,dsnuser=>$dsnuser,dsnpasswd=>$dsnpasswd}) ;

 SWITCH: {
    ($command eq 'createdb') && do { $fqdb->createdb();
                                     last SWITCH;};
    ($command eq 'addstock') && do { $fqdb->addstock($market,$stocks);
                                     last SWITCH;};
    ($command eq 'delstock') && do { $fqdb->delstock($stocks);
                                     last SWITCH;};
    ($command eq 'updatedb') && do { $fqdb->updatedb();
                                     last SWITCH;};
    ($command eq 'backpopulate') && do { $fqdb->backpopulate($startdate,$enddate,$overwrite,$stocks);
                                         last SWITCH;};
    ($command eq 'getquotes') && do { $fqdb->getquotes($stocks,$startdate,$enddate);
                                      last SWITCH;};
    INFO ("Nothing to do: No command given\n");
  };
}

=head1 license

=cut

sub license {
    INFO("Finance::QuoteDB  Copyright (C) 2008  Erik Colson\n") ;
    INFO("This program comes with ABSOLUTELY NO WARRANTY; for details type `fqdb -w'.\n") ;
    INFO("This is free software, and you are welcome to redistribute it\n") ;
    INFO("under certain conditions; type `fqdb -c' for details.\n") ;
};


=head1 COPYRIGHT & LICENSE

Copyright 2008 Erik Colson, all rights reserved.

This file is part of Finance::QuoteDB.

Finance::QuoteDB is free software: you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.

Finance::QuoteDB is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License
along with Finance::QuoteDB.  If not, see
<http://www.gnu.org/licenses/>.

=cut
