#!/usr/local/bin/perl

use strict;
use lib qw(
	/home/sites/www.proface.co.jp/lib/site_perl
	/home/sites/www.proface.co.jp/lib
	/home/sites/www.proface.co.jp/lib/i386-linux
);

use CGI::Carp qw{ fatalsToBrowser };
use CGI;
use HTML::Template;
use Jcode;

use Apache::Session::DB_File;
use Apache::Session::Lock::File;

use File::Basename;


## 初期設定
#----------------------------------------------------------------------

# ホームディレクトリ(末尾はスラッシュで終わらないこと)
sub HOME_DIR()	{	'/home/sites/www.proface.co.jp'	}

# データ保存ディレクトリ(末尾はスラッシュで終わらないこと)
sub DATA_DIR()	{	HOME_DIR() . '/data/otasuke/login'	}

# セッションのキー名
sub SESS_KEY()	{	'SESS_FAPLAZA'	}

# Apache::Session::xxxxのオプション(ハッシュリファレンス)
sub SESS_OPTION()		{
	return {
		FileName		=>	DATA_DIR() . '/sessions.db',
		LockDirectory	=>	'/tmp',
	};
}

# セッションデータの寿命(秒)
sub SESS_DATA_LIFE()	{	86400	}

# インデックスURL
sub INDEX_URL {	'http://www.proface.co.jp/otasuke/download/export/index.htm' }

# PDF設置パス
sub PDF_PATH { HOME_DIR() . '/web/otasuke/files/parameter' }

# PDF設置URL
sub PDF_URL { 'http://www.proface.co.jp/otasuke/files/paremeter' }

#----------------------------------------------------------------------

my $cgi = new CGI;

# セッションIDの取得
my $id = $cgi->cookie( SESS_KEY() );

my %session;
tie %session, 'Apache::Session::DB_File', $id, SESS_OPTION();

# 必要なパラメータが入っていなければ、インデックスへ

foreach ( qw/name country way exp_corp/ ) {
	unless ( defined $session{$_} ) {
		print $cgi->redirect( INDEX_URL );
		exit;
	}
}

# リクエストURLのチェック
my $url = $cgi->param('page');
my $pdf_filename = basename($url);
my $pdf_path = PDF_PATH() .  "/$pdf_filename";


## 存在しなければ、エラー
## 存在すれば、ログに出力し
## PDFを書き出す。
if ( -f $pdf_path ) {


	# ログの出力
	# PDFはbyte rangeを使って２回以上のリクエストを出すことがあるため、
	# 一度出力したPDFファイルはログ出力をしない。
	outputParameterData( \%session, $pdf_filename ) unless ( exists $session{$pdf_filename} );
	$session{ $pdf_filename } = 1;

	# ヘッダの出力
	print $cgi->header(
			-type=>'application/pdf',
			-expires  => '-1d',
			-Cache_Control => 'no-cache',
			-Pragma => 'no-cache',
			);

	# pdf ファイルの読み込み・出力
	open (PDF, "<$pdf_path") || die "pdf file cannot open! : $!";
	while ( my $line = <PDF> ) {
		print $line;
	}
	close PDF;

} else {
    print $cgi->header('text/html','404 Not Found');
}

exit;


#-------------------------------------------------------------------------------
# 製品データの書き出し
sub outputParameterData {
	my $ref_session = shift;
	my %session = %$ref_session;
	my $data = shift;

	my $file = HOME_DIR() . '/data/otasuke/export/' . make_file_name( 'para' );

	#データ保存
	open CSV, ">>$file"
		|| die "can't open data file : $!";
	flock CSV, 2;

	my $line = join ',', map {(s/"/""/g or /[\r\n,]/) ? qq("$_") : $_} 
		(	get_today(),
			@session{ 'today', 'name' },
			$data,
			$ENV{'REMOTE_ADDR'},
		);
	binmode CSV;
	print CSV $line . "\x0d\x0a";

	close CSV;
	
	
	
}

# 現在時刻の取得
sub get_today {
	my ($sec, $min, $hour, $mday, $mon, $year) = localtime(time());
	return sprintf("%04d/%02d/%02d %02d:%02d:%02d", 
		$year + 1900, $mon + 1, $mday,
		$hour, $min, $sec);
}

# ファイル名の作成
sub make_file_name {
	my $pre		=	shift;
	my $time	=	shift || time;
	my ( $year, $mon )	=	( localtime( $time ) )[5,4];
	return sprintf "%s%04d%02d.log", $pre, $year + 1900, $mon + 1;

}
