#!/usr/bin/perl
#--NetShopOwner-CGI-version:5.0.0.0--

;#
;# s_shop_index.cgi
;# [スマートフォン]トップページ
;# (C) 2012 株式会社ジャストシステム
;#
;# last modified YYYY/MM/DD
;#

use strict;
use uselib;
use defnsopath_shops;
use NsoVersionSP 1.00;
use Lib::SiteStatus;
use NsoUserAgent;
use NsoMobileAffiliate;
use DB::NsoShopCampaignDB;
use DB::NsoArticleCampaignDB;

&ReadParse();
my %in    = %main::in;
my %incfn = %main::incfn;
my %inct  = %main::inct;

# インスタンス定義
my $objConfigSystem = Config::NsoSystem->newShop();
my $objConfigMaster = Config::NsoMaster->new();
my $NsoMisc       = NsoMisc->new();
my $NsoUserAgent  = NsoUserAgent->new();

# コンフィグレーションのキャッシュ
my %ConfigSystem = $objConfigSystem->cache_config();
my %ConfigMaster = $objConfigMaster->cache_config();

my $status_err;

my $NsoShopCampaignDB = NsoShopCampaignDB->new({ ConfigSystem=>\%ConfigSystem, ConfigMaster=>\%ConfigMaster});
my $NsoArticleCampaignDB = NsoArticleCampaignDB->new({ ConfigSystem=>\%ConfigSystem, ConfigMaster=>\%ConfigMaster});

FUNC:{
	my $func = $in{func} || 'main';
	my %function = (
		main       => \&main,
	);
	
	&check_closing();
	
	if ($function{$func}){
		$function{$func}->();
	}else{
		&main();
	}
}
exit();

;#
;# 開店・閉店状態検査
;#
sub check_closing {
	my $SiteStatus = Lib::SiteStatus->new({ ConfigSystem=>\%ConfigSystem });
	$SiteStatus->CheckClosing();
	$SiteStatus->CheckUserAgentSmartPhone();
}

;#
;# メイン処理
;#
sub main {

	# テンプレート置換
	my $html_templ_dir  = "./";
	my $html_templ_kind = "nsoDB/templ/";
	my $DataHead = "s_shop_index_head.htmp";
	my $DataFoot = "s_shop_index_foot.htmp";
	my %TextHead = ();
	my %TextFoot = ();
	my %htmls    = ();

	# テンプレート読込
	my $NsoTemplHead = NsoTempl->new({ DataDir=>$html_templ_dir, DirKind=>$html_templ_kind, Data=>$DataHead });
	my $NsoTemplFoot = NsoTempl->new({ DataDir=>$html_templ_dir, DirKind=>$html_templ_kind, Data=>$DataFoot });

	# キャンペーンリスト作成
	my $body_contents;
	if($ConfigSystem{navigationCampaign_view}{smartphone}{flag} eq "1"){
		&makeCampaignList( {
			htmls         => \%htmls         ,
			BodyContents  => \$body_contents ,
		} );
	}

	# テンプレート置換
	my %replace_templ_head = (
		Text  => \%TextHead ,
		htmls => \%htmls    ,
	);
	my %replace_templ_foot = (
		Text => \%TextFoot ,
	);

	# 表示HTML作成
	my $contents = "";
	$contents .= $NsoTemplHead->replace_templ(\%replace_templ_head);
	$contents .= $body_contents;
	$contents .= $NsoTemplFoot->replace_templ(\%replace_templ_foot);

	print $NsoMisc->print_header();
	print $contents;

	exit();
}

;#
;# キャンペーン一覧を作成する
;# @param %htmls         置換用ハッシュ、エラーメッセージを入れる
;#         BodyContents  ボディHTML、ループ結果生成されたもの
;# @return なし
;#
sub makeCampaignList(){
	my ($params) = shift if @_;

	my $htmls         = $params->{htmls};
	my $body_contents = $params->{BodyContents};

	# テンプレート
	my $html_templ_dir  = "./";
	my $html_templ_kind = "nsoDB/templ/";
	my $DataBody1 = "s_shop_index_body1.htmp";
	my $DataBody2 = "s_shop_index_body2.htmp";
	my $DataBody3 = "s_shop_index_body3.htmp";
	my $DataBody4 = "s_shop_index_body4.htmp";

	# テンプレート読込
	my $NsoTemplBody1 = NsoTempl->new({ DataDir=>$html_templ_dir, DirKind=>$html_templ_kind, Data=>$DataBody1 });
	my $NsoTemplBody2 = NsoTempl->new({ DataDir=>$html_templ_dir, DirKind=>$html_templ_kind, Data=>$DataBody2 });
	my $NsoTemplBody3 = NsoTempl->new({ DataDir=>$html_templ_dir, DirKind=>$html_templ_kind, Data=>$DataBody3 });
	my $NsoTemplBody4 = NsoTempl->new({ DataDir=>$html_templ_dir, DirKind=>$html_templ_kind, Data=>$DataBody4 });

	# ショップキャンペーン読み込み
	my $shop_contents = "";
	if($ConfigSystem{navigationCampaign_view}{smartphone}{flag_shop} eq "1"){
		my %resultShopCampaign = $NsoShopCampaignDB->GetShopCampaignForNavigation();
		my %resultShopCampaignHash = (
			RecordList  => $resultShopCampaign{RecordList},
			RecordCount => $resultShopCampaign{RecordCount},
			status_err  => $resultShopCampaign{status_err},
		);
		# DBエラー時
		if ($resultShopCampaignHash{status_err} ne ""){
			$htmls->{status_err} = 'DB情報取得に失敗しました。(1)<br>' . $resultShopCampaignHash{status_err};
			return;
		} elsif ($resultShopCampaignHash{RecordCount} == 0){
			# レコードがない場合、$shop_contentsは空のまま
		} else {
			my %shopCampaign = %{$resultShopCampaignHash{RecordList}[0]};

			my %TextBody2 = ();
			# 説明文（改行文字をエスケープして、<br>タグに変換）
			$TextBody2{ShopCampaignExplanation} = $NsoMisc->newline_br($NsoMisc->unesc_newline($shopCampaign{ExplanationSmartPhone}));

			my %replace_templ_body2 = (Text => \%TextBody2 ,);
			$shop_contents .= $NsoTemplBody2->replace_templ(\%replace_templ_body2);
		}
	}

	# 商品キャンペーン読み込み
	my $article_contents = "";
	if($ConfigSystem{navigationCampaign_view}{smartphone}{flag_article} eq "1"){
		my %resultArticleCampaign = $NsoArticleCampaignDB->GetArticleCampaignForNavigation();
		my %resultArticleCampaignHash = (
			RecordList  => $resultArticleCampaign{RecordList},
			RecordCount => $resultArticleCampaign{RecordCount},
			status_err  => $resultArticleCampaign{status_err},
		);
		# DBエラー時
		if ($resultArticleCampaignHash{status_err} ne ""){
			$htmls->{status_err} = 'DB情報取得に失敗しました。(2)<br>' .  $resultArticleCampaignHash{status_err};
			return;
		} elsif ($resultArticleCampaignHash{RecordCount} == 0){
			# レコードがない場合、$article_contentsは空のまま
		} else {
			my @articleCampaignArray = @{$resultArticleCampaignHash{RecordList}};

			for(my $i = 0 ; $i < @articleCampaignArray ; $i++ ){
				my %TextBody3 = ();
				$TextBody3{ArticleCampaignID}   = $articleCampaignArray[$i]{CampaignID};
				$TextBody3{ArticleCampaignName} = $articleCampaignArray[$i]{CampaignName};

				my %replace_templ_body3 = (Text => \%TextBody3 ,);
				$article_contents .= $NsoTemplBody3->replace_templ(\%replace_templ_body3)
			}
		}
	}

	# 表示するショップor商品キャンペーンが1つでもあれば、キャンペーンヘッダフッタをつけて表示HTML作成
	if($shop_contents ne "" || $article_contents ne ""){
		my %TextBody1 = ();
		my %replace_templ_body1 = (Text => \%TextBody1 ,);
		my %TextBody4 = ();
		my %replace_templ_body4 = (Text => \%TextBody4 ,);
		$$body_contents = "";
		$$body_contents .= $NsoTemplBody1->replace_templ(\%replace_templ_body1);
		$$body_contents .= $shop_contents;
		$$body_contents .= $article_contents;
		$$body_contents .= $NsoTemplBody4->replace_templ(\%replace_templ_body4);
	} else{
		$$body_contents = "";
	}
}


















