#!/usr/bin/perl

use LWP::UserAgent;
use POSIX;

#'de-DE' => 'EUR'
#'es-ES' => 'EUR'
#'fr-FR' => 'EUR'
#'it-IT' => 'EUR'
#'ru-RU' => 'RUB'
#'uk-UA' => 'UAH'
#'en'    => 'USD'
#'nb-NO' => 'NOK'
#'pl-PL' => 'PLN'

my @currencyblocks = ( ['CAD', '$'   ],
['EUR', '€'   ],
['GBP', '£'   ],
['NOK', '$'   ],
['PLN', 'zł'  ],
['RUB', 'руб.'],
['UAH', 'грн.'],
['USD', '$'   ],
);
my $currencysymbols =  {
                         CAD => '$'   ,
                         EUR => '€'   ,
                         GBP => '£'   ,
                         UAH => 'грн.',
                         NOK => '$'   ,
                         PLN => 'zł'  ,
                         RUB => 'руб.',
                         USD => '$'   ,
                       };

my @currencies;
my @pairs;
my %rates;
my @now = localtime;

foreach my $block (@currencyblocks) {
    my ($currency, $symbol) = @$block;
    push @currencies, $currency;
    print "$currency: $symbol\n";
}
foreach my $currency1 (@currencies) {
    foreach my $currency2 (@currencies) {
        push @pairs,"$currency1$currency2";
    }
}
 
my $ua = LWP::UserAgent->new;
$ua->timeout(10);
$ua->env_proxy;
 
foreach my $pair (@pairs) {
    my $response = $ua->get("http://download.finance.yahoo.com/d/quotes.csv?s=$pair=X&f=l1");
    if ($response->is_success) {
        $rates{$pair} = $response->decoded_content * 1;
    }
    else {
        die $response->status_line;
    }
}

foreach my $currency1 (@currencies) {
    print "$currency1 file\n";
    open my $fh,">","$currency1.sql";
    print $fh "INSERT INTO currency (currency, symbol, rate, timestamp, active) VALUES\n";
    foreach my $currency2 (@currencies) {
        my $pair = "$currency1$currency2";
        my $active = 0;
        if ($currency1 eq $currency2) { $active = 1; }
        my $timestamp = POSIX::strftime("%Y-%m-%d %H:%M:%S", @now);
        print $fh "( '$currency2', '" . $currencysymbols->{$currency2} . "', $rates{$pair}, $timestamp, $active )";
        if ($currency2 eq $currencies[-1]) {
           print $fh ";\n";
        }
        else {
           print $fh ",\n";
        }
    }
    close $fh;
}
