#!/usr/bin/perl
##################################################
# ccon -- Mike Schilli, 2001 (m@perlmeister.com)
# Convert currencies on the command line.
# Syntax: ccon amount source target
#                   [EUR,USD,DEM,GBP,ATS,ESP,FRF,
#                     FRF,GRD,ITL,NLG,AUD,CHF,JPY]
##################################################
use 5.6.0;
use warnings;
use strict;

use Finance::Currency::Convert;
use Time::Local;

my $RATES_CACHE = "$ENV{HOME}/.currency";

my($amount, @WAY) = @ARGV;

die "usage: $0 amount from to\n" 
    unless defined $ARGV[2];

my $conv = Finance::Currency::Convert->new();

    # Cache-Datei setzen und lesen falls
    # vorhanden
$conv->setRatesFile($RATES_CACHE);

if(!$conv->convert($amount, @WAY) or
    update_recommended()) {
        # Vom Internet nachladen
    print "Updating ... Please wait.\n";
    $conv->updateRate(@WAY);
    $conv->writeRatesFile();
}

my $rate = $conv->convert($amount, @WAY);

die "Can't convert ", 
    join(' => ', @WAY) unless defined $rate;

print "$rate\n";

##################################################
sub update_recommended {
##################################################

        # nicht vorhanden => nachladen
    return 1 unless -f $RATES_CACHE;

    my $date = time();
    my @date = localtime($date);

    $date -= 3600*24 if $date[2] < 10;

        # Letzten Werktag suchen
    { @date = localtime($date);
      $date -= 3600*24, redo if
          $date[6] == 0 or $date[6] == 6;
    }

        # Auf 10:00 setzen
    @date[0..2] = (0, 0, 10);

        # Zurück ins Sekundenformat
    $date = timelocal(@date);

    return (stat($RATES_CACHE))[9] < $date;
}
