#!/usr/bin/perl

# nanakochi123456 version nyatakasan/hiratara 1st release:mnakajim

BEGIN {
	require "fatlib.pl";
};

use utf8;
use strict;
use CGI;
use Encode qw/decode decode_utf8/;
use Encode::Guess;
use Text::MicroTemplate::File;
require "common.pl";

my $cache="./cache";
my $date=&date("Y-m-d");
my $logfile="$cache/usage-$date.log";
my $debug;
my $hour=&date("H");

&main;

sub main {
	binmode(STDOUT, ":utf8");
	my $query=new CGI;
	my $targetdate=$query->param('date');
	# ↓セキュリティー考慮
	$targetdate=~s/\/\.//g;

	my ($target_year, $target_mon, $target_day, $target_time)
		= split(/-/,$targetdate);
	if($targetdate eq '') {
		$target_year=&date("Y");
		$target_mon=&date("m");
		$target_day=&date("d");
	}
	if($target_time eq '') {
		$target_time=
			   $hour >= 18 ? 18
			 : $hour >= 12 ? 12
			 : $hour >=  6 ? 6 : 0; 
	}
	if(!opendir(DIR,$cache)) {
		print <<EOM;
Content-type: text/plain

$cache not found
EOM
	}
	my @tmp;
	my @logdates;
	while(my $file=readdir(DIR)) {
		if($file=~/usage\-(\d+)-(\d+)-(\d+)\.log$/) {
			push(@tmp,"$1-$2-$3");
		}
	}
	closedir(DIR);
	@tmp=reverse sort @tmp;
	foreach(@tmp) {
		my($year,$mon,$day)=split(/-/,$_);
		push @logdates,  {
			file => $_,
			year => $year,
			mon  => $mon,
			day  => $day,
		};
	}

	if($targetdate ne '') {
		$logfile="$cache/usage-$target_year\-$target_mon\-$target_day.log";
	}

	if(!open(R,$logfile)) {
		print <<EOM;
Content-type: text/plain

$logfile not found
EOM
		exit;
	}
	my $http_body;
	foreach(<R>) {
		$http_body.=$_;
	}
	close(R);

	$http_body=~s/\x0D\x0A|\x0D|\x0A/\x0A/g;
	$http_body=&force_decode($http_body);

	my @pwtmp=split(/\n/,$http_body);
	my $update=$pwtmp[0];
	my $kyoukyuu=$pwtmp[2];
	my $maxpower=$pwtmp[5];
	my @pw;
	for(my $i=0; $i<24*(60/5); $i++) {
		$pw[$i]=$pwtmp[$i+44];
	}
		
	my($update_date,$update_time,$tmp)=split(/ /,$update);
	my $update_str="$update_date $update_time";
	my($kyoukyuu_kw,$kyoukyuu_time,$kyoukyuu_date,$kyoukyuu_update_time)
		=split(/,/,$kyoukyuu);
	my($maxpower_kw,$maxpower_time,$maxpower_date,$maxpower_update_time)
		=split(/,/,$maxpower);
	my $today_persent=sprintf("%.1f",($maxpower_kw+0) / ($kyoukyuu_kw+0)*100);
	my $maxupdate="$maxpower_date $maxpower_update_time";

	my @hour_refs;
	for(my $i=0; $i<24*(60/5); $i++) {
		my($pw_date,$pw_time,$today_power)
			=split(/,/,$pw[$i]);
		my $persent=sprintf("%.1f",($today_power+0) / ($kyoukyuu_kw+0)*100);
		push @hour_refs,  {
			date => $pw_date,
			time => $pw_time,
			today_power => $today_power+0,
			persent => $persent,
		};
	}
	&gzip_compress("Content-type: text/html; charset=utf-8\nCache-Control: max-age=0\nExpires: Mon, 26, Jul 1997 05:00:00 GMT");
	my $mtf = Text::MicroTemplate::File->new;
	my $template;
	$template="powerusage_jp.html";
	my $html = $mtf->render_file(
		$template,
		"東京電力","TEPCO's",
		"$update_date $update_time",
		$kyoukyuu_kw,$kyoukyuu_time,
		$maxpower_kw,$maxpower_time,
		$today_persent,$maxupdate,
		$target_year, $target_mon, $target_day, $target_time,
		\@hour_refs,\@logdates,$hour
);
	print <<EOM;
<?xml version="1.0" encoding="UTF-8" ?>
$html$debug
EOM
}
