#!/usr/bin/perl
use strict;
use Tie::Comma;

my %planets=("Godstone"         => {metal     => 20,
                                    crystal   => 20,
                                    deuterium => 16,
                                    max_temp  => 69},

             "Fear"             => {metal     => 15,
                                    crystal   => 14,
                                    deuterium => 13,
                                    max_temp  => 33},

             "Irssi"            => {metal     => 18,
                                    crystal   => 17,
                                    deuterium => 14,
                                    max_temp  => 68},

             "Colony"           => {metal     => 4,
                                    crystal   => 5,
                                    deuterium => 9,
                                    max_temp  => 115},

             "Destroyed Planet" => {metal     => 18,
                                    crystal   => 15,
                                    deuterium => 13,
                                    max_temp  => 66},

             "Decoy"            => {metal     => 13,
                                    crystal   => 14,
                                    deuterium => 5,
                                    max_temp  => 65},
             );

my %total;

for my $p (keys %planets) {
    print "Production on $p:\n";
    for(qw(metal crystal deuterium)) {
        my $l  = $planets{$p}{$_};
        my $hr = production($_,$l,$planets{$p}{"max_temp"});
        my $d  = $hr*24;
        my $w  = $d*7;
        
        printf("  %10s (%2s) -  hour: %-7s   day: %-7s   week: %-8s\n",
               $_,$l,$comma{$hr},$comma{$d},$comma{$w});
        $total{$_}+=$hr;
    }
    print "\n";
}

print "\nTotal production:\n";
for(qw(metal crystal deuterium)) {
    my $hr = $total{$_};
    my $d  = $hr*24;
    my $w  = $d*7;

    printf("  %10s -  hour: %-7s   day: %-7s   week: %-8s\n",
           $_,$comma{$hr},$comma{$d},$comma{$w});
}


# calculate the production of an item at a given level (and max temperature)
sub production {
    my($item,$level,$max_temp)=@_;
    $level ||= 1;
    my $prod;
    if ($item eq "metal") {
        $prod=30*$level*1.1**$level;
    }
    elsif ($item eq "crystal") {
        $prod=20*$level*1.1**$level;
    }
    elsif ($item eq "deuterium") {
        $prod=10*$level*1.1**$level*(-0.002*$max_temp+1.28);
    }
    elsif ($item eq "solar") {
        $prod=20*$level*1.1**$level;
    }
    elsif ($item eq "fusion") {
        $prod=50*$level*1.1**$level;
    }
    elsif ($item eq "sat") {
        $prod=($max_temp/4)+20;
        $prod=50 if $prod > 50;
    }
    return $prod ? sprintf("%d",$prod) : "";
}
