#!/usr/bin/perl

#	買い物かごに商品を入れる
#	IN	K=コーナー C=商品コード S=数量 M=モード(0:加算,1:置換) M2=モード２(1:注文明細の更新) I=ID(0=クッキー) D=配達先 N=のし紙
#	カートファイル
#		h_xxxxx.txt		
#		日付、時間、点数、金額、本体(未)、消費税(未)、送料１(明細計)、送料２
#		$date,$time,$g_tensu,$g_kingaku,$g_hontai,$g_zei,$g_soryo1,$g_soryo2,CR
#		b_xxxxx.txt
#		数量、税込単価、税込金額、税抜単価(未)、消費税(未)、お届先、のし紙、＜商品マスター＞
#		$su,$komitanka,$komikingaku,$nukitanka,$zei,
#		$floor,$corner,$scode,$name,$imgs,$imgl,$maker,$cmnts,$cmntm,$cmntl,
#		$yoryo,$sanchi,$genryo,$hyojun,$tujo,$baika,$soryo,
#		$sonta1,$sonta2,$sonta3,$sonta4,$sonta5,$sonta6,$sonta7,$sonta8,$sonta9,$sonta10,CR

use DBI;

require 'jcode.pl';
require './settings.cgi';

#==================================================================
#	設定
#==================================================================

#==================================================================
#	引数の解析
#==================================================================
if ($ENV{'REQUEST_METHOD'} eq "POST") {
	read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
	$buffer = $ENV{'QUERY_STRING'};
}

#Split the name-value pairs
@pairs = split (/&/,$buffer);

foreach $pair(@pairs)
{
    ($name, $value) = split(/=/, $pair);

    #Un-Webify plus signs and %-encoding
    $value=~tr/+/ /;
    $value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;

    $FORM{$name} = $value;
}

$suryo = $FORM{'S'};
if( $suryo =~ /^([0-9]*)$/ ) {

#==================================================================
#	ＩＤの取得
#==================================================================

	$cookies = $ENV{'HTTP_COOKIE'};
	@pairs = split(/ /, $cookies);
	foreach $pair (@pairs) {
		($name, $value) = split(/=/, $pair);
		$value =~ s/\;//g;
		$cc{$name} = $value;
	}
	$id = $cc{'CartID'};

#==================================================================
#	ユーザーIDを設定
#==================================================================
	if( $id eq "" ) {		# クッキーに存在しなければ新規でID発行
		# カウンタの読み込み
		open(COUNT,"$count_file") || open(COUNT,">$count_file");
		flock(COUNT, 2);
		@COUNT = <COUNT>;
		print COUNT @COUNT;
		flock(COUNT, 8);
		close(COUNT);

		chomp( $COUNT[0] );
		if( $COUNT[0] eq "" ) { $COUNT[0] = 0; }
		$COUNT[0]++;
		if( $COUNT[0] > 999 ) { $COUNT[0] = 1; }

		open(COUNT,">$count_file");
		flock(COUNT, 2);
		print COUNT @COUNT;
		flock(COUNT, 8);
		close(COUNT);

		# 現在の日時を取得
		($sec,$min,$hour,$day,$mon,$year,$wday) = localtime(time);
		$id = sprintf("%04d%02d%02d-%02d%02d%02d-$COUNT[0]",$year+1900,$mon+1,$day,$hour,$min,$sec);
		# クッキーにセット
		print "Content-Type: text/html\n";
		print "Set-Cookie: CartID=$id;\n\n";
		$cookie_write = 1;
	} else {
		$cookie_write = 0;
	}

#==================================================================
#	カート読込
#==================================================================

	open (DATA,"../cart/b_$id.txt");
	flock (DATA, 2);
	@data = <DATA>;
	flock (DATA, 8);
	close(DATA);

#==================================================================
#	カート登録(ボディ)
#==================================================================
	
	$g_tensu = 0;
	$g_kingaku = 0;
	$g_hontai = 0;
	$g_zei = 0;
	$g_soryo1 = 0;
	$g_soryo2 = 0;

	$url = "../cart/b_$id.txt";
	open (WDATA,">$url") || die $!;
	flock (WDATA, 2);
	$writtend = 0;

	# すでにカートにある商品なら数量の増減をする

	@cool = ();

	foreach $data_line (@data) {
		($su,$komitanka,$komikingaku,$nukitanka,$zei,$todokesaki,$noshi,
			$floor,$corner,$scode,$name,$imgs,$imgl,$maker,$cmnts,$cmntm,$cmntl,
			$yoryo,$sanchi,$genryo,$hyojun,$tujo,$baika,$soryo,
			$sonta1,$sonta2,$sonta3,$sonta4,$sonta5,$sonta6,$sonta7,$sonta8,$sonta9,$sonta10,$CR)
			= split(/,/,$data_line);

		$flag = 0;
		if( $FORM{M} != 1 && $FORM{S} == 0 ) {
			if ( $corner != $FORM{'K'} || $scode != $FORM{'C'} ) { $flag = 1; }
		} else {
			if ( $corner != $FORM{'K'} || $scode != $FORM{'C'} || $todokesaki != $FORM{'D'} ) { $flag = 1; }
		}
		if ( $flag == 1 ) {
			print WDATA "$data_line";
		} else {

			# 届け先とのし紙の指定

			if( $FORM{'D'} ne "" ) { $todokesaki = $FORM{'D'}; }
			if( $FORM{'N'} ne "" ) { $noshi = $FORM{'N'}; }

			$writtend = 1;
			if ( $FORM{'M'} != 1 ) {
				if( $FORM{'M'} == 0 ) { $su = $su + $FORM{'S'}; }
				if( $FORM{'M'} == 2 ) { $su = $su - $FORM{'S'}; }
				if ( $su < 0 ) { $su = 0; }
			} else {
				$su = $FORM{'S'};
			}
			$komikingaku = $komitanka * $su;
			$upd = sprintf( "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,\n",
					$su,$komitanka,$komikingaku,$nukitanka,$zei,$todokesaki,$noshi,
					$floor,$corner,$scode,$name,$imgs,$imgl,$maker,$cmnts,$cmntm,$cmntl,
					$yoryo,$sanchi,$genryo,$hyojun,$tujo,$baika,$soryo,
					$sonta1,$sonta2,$sonta3,$sonta4,$sonta5,$sonta6,$sonta7,$sonta8,$sonta9,$sonta10 );
			if( $FORM{M} != 1 || $su != 0 ) { print WDATA "$upd"; } else { $soryo = 0; }
		}

		# 合計計算

		$g_tensu += $su;
		$g_kingaku += $komikingaku;
		#$g_hontai = 0;
		#$g_zei = 0;
		if( $soryo >= 100 ) {
			if( $soryo == $cool_daikin ) {
				if( $cool[$todokesaki] != 1 ) {
					$g_soryo1 += $soryo;
				}
				$cool[$todokesaki] = 1;
			} else {
				$g_soryo1 += $soryo * $su; 
			}
		}
		#$g_soryo2 = 0;	
	}

	# 新たな商品だった場合は行追加

	if ( $writtend eq 0 ) {

		# 商品マスター読込

		$dbh = DBI->connect($data_source,$user_name,$user_pass) || die "CONNECT ERROR $DBI::ERRSTR";
		$sql = "SELECT * FROM shohin WHERE Corner=$FORM{'K'} && Code=$FORM{'C'};";
		$sth = $dbh->prepare($sql);
		$sth->execute() || die print $sth->errstr;
		@KOMOKU = $sth->fetchrow_array;
		$sth->finish;
		$dbh->disconnect;

		# 商品データをカンマ区切りの文字列にする

		$shohindata = "";
		for( $i = 0; $i < 27; $i++ ) {
			if( $i != 0 ) { $shohindata = $shohindata . ","; }
			chomp( $KOMOKU[$i] );
			$shohindata = $shohindata . $KOMOKU[$i];
		}

		# 明細追加

		$su = $FORM{'S'};
		$code = $FORM{'C'};
		$todokesaki = $FORM{'D'};
		if( $todokesaki eq "" ) { $todokesaki = 0; }
		$noshi = $FORM{'N'};
		if( $noshi eq "" ) { $noshi = "なし"; }
		$komitanka = $KOMOKU[15];
		$komikingaku = $komitanka * $su;
		$ins = sprintf( "%s,%s,%s,%s,%s,%s,%s,%s,\n",
			$su,$komitanka,$komikingaku,$nukitanka,$zei,$todokesaki,$noshi,
			$shohindata );
		print WDATA "$ins";

		# 合計計算

		$g_tensu += $su;
		$g_kingaku += $komikingaku;
		#$g_hontai = 0;
		#$g_zei = 0;
		if( $KOMOKU[16] >= 100 ) {
			if( $KOMOKU[16] == $cool_daikin ) {
				if( $cool[$todokesaki] != 1 ) {
					$g_soryo1 += $KOMOKU[16];
				}
			} else {
				$g_soryo1 += $KOMOKU[16] * $su;
			}
		}
		#$g_soryo2 = 0;	
	}
	flock (WDATA, 8);
	close(WDATA);

#==================================================================
#	カート登録(ヘダー)
#==================================================================
	
	open (WHDR,">../cart/h_$id.txt") || die $!;
	flock (WHDR, 2);
	($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time+3600*24*$datecnt);
	$date = sprintf("%04d%02d%02d", $year+1900, $mon+1, $mday );
	$time = sprintf("%02d%02d%02d", $hour, $min, $sec );
	$hdr = sprintf( "%s,%s,%s,%s,%s,%s,%s,%s,\n",
		$date, $time, $g_tensu, $g_kingaku, $g_hontai, $g_zei, $g_soryo1, $g_soryo2 );
	print WHDR "$hdr";
	flock (WHDR, 8);
	close(WHDR);
}

	if( $cookie_write == 0 ) {
		print "Content-type: text/html\n\n";
	}
	if( $FORM{M2} eq "" ) {		# 「商品一覧」、「検索」、「カートを見る」から呼ばれる
		$bkurl = $FORM{url};
		print "<html><head></head><body onLoad=location.href='lookcart.cgi?url=$bkurl';></body></html>\n";
#		print "Location: http://$ENV{'SERVER_NAME'}$path_leftcgi\n\n";
	}
	if( $FORM{M2} == 1 ) {		# ギフト配達先変更から呼ばれる
		print "<html><head></head><body onLoad=location.href='lookcart.cgi';></body></html>\n";
#		print "Location: http://$ENV{'SERVER_NAME'}$path_leftcgi?mode=1&next=lookcart\n\n";
	}
	if( $FORM{M2} == 2 ) {		# 未使用？？
		print "<html><head></head><body onLoad=opener.location.href='kessai.cgi';window.close();></body></html>\n";
#		print "Location: http://$ENV{'SERVER_NAME'}$path_leftcgi?mode=1\n\n";
	}
	
exit;
