/***************************************
*                                      *
*              FILE OPEN               *
*                                      *
*                                      *
****************************************/

#include <iostream>
#include <cstdlib>
#include "snaps.h"
#include "file_open.h"
#include "cntl.h"

// 経済要素（番号のみ）
#define ECON           "9121"

// 外枠（枠番号のみ）
#define SOTOWAKU       "9111"
#define SOTOWAKU_JURAI "9111"

// 基礎率
#define KISORITU            "/rev26/nat/kisoritu/kisoritu-26.csv"

// 納付率関係
// 足下の納付率・免除率
#define NOUFU_MENJO         "/rev26/nat/kisoritu/noufu_menjo26.csv"

// 全体納付率
#define MOKUHYO_NOUFU60     "/rev26/nat/kisoritu/mokuhyou26-60.csv"
#define MOKUHYO_NOUFU65     "/rev26/nat/kisoritu/mokuhyou26-65.csv"

// 生命表ファイル
#define LIFE_TABLE          "/rev26/emp/data/u-sinj/QXPROJ-M24z.csv"

// 経年変化用ファイル
// 老齢年金発生割合用
#define ROREI_KEINEN        "/rev26/nat/kisoritu/r_keinen_26.csv"

// 遺族年金用有遺族率
#define IZOKU_KEINEN        "/rev26/nat/kisoritu/yu_izoku_26.csv"


void file_open()
{
	char filename[250];
	
	using namespace std;
	
	// 入力ファイル
	// 基礎率
	if( ( fp_kisoritu = fopen( KISORITU , "r" ) ) == NULL )
	{
		cout << "基礎率ファイルのオープンに失敗しました" << endl;
		exit(1);
	}
	read_headder( fp_kisoritu );
	fprintf( fp_settei , "基礎率ファイル %s\n" , KISORITU );
	
	// 外枠
	// 将来推計人口
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-26.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_sotowaku[0] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（人口）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（人口）   %s\n" , filename );
	
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-26.csv" , SOTOWAKU_JURAI , SOTOWAKU_JURAI );
	if( ( fp_sotowaku_jurai[0] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（人口）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（人口）   %s\n" , filename );
	
	// 国年１号（強制＋任意）
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-10.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_sotowaku[1] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（１号）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（１号）   %s\n" , filename );
	
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-10.csv" , SOTOWAKU_JURAI , SOTOWAKU_JURAI );
	if( ( fp_sotowaku_jurai[1] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（１号）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（１号）   %s\n" , filename );
	
	// ３号計
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-20.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_sotowaku[2] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（３号計）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（３号計）   %s\n" , filename );
	
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-20.csv" , SOTOWAKU_JURAI , SOTOWAKU_JURAI );
	if( ( fp_sotowaku_jurai[2] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（３号計）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（３号計）   %s\n" , filename );
	
	// パート適用拡大関係
	// １号→パートとなった者
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-33.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_sotowaku_part[0] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（１号→パート）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（１号→パート）   %s\n" , filename );
	
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-33.csv" , SOTOWAKU_JURAI , SOTOWAKU_JURAI );
	if( ( fp_sotowaku_part_jurai[0] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（１号→パート）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（１号→パート）   %s\n" , filename );
	
	// ３号→パートとなった者
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-34.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_sotowaku_part[1] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（３号→パート）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（３号→パート）   %s\n" , filename );
	
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-34.csv" , SOTOWAKU_JURAI , SOTOWAKU_JURAI );
	if( ( fp_sotowaku_part_jurai[1] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（３号→パート）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（３号→パート）   %s\n" , filename );
	
	if( Option2 == 1 || Option2 == 2 )
	{
		// オプションⅡ用
		// １号→パートとなった者
		sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-37.csv" , SOTOWAKU , SOTOWAKU );
		if( ( fp_sotowaku_part[2] = fopen( filename , "r" ) ) == NULL )
		{
			cout << "外枠ファイル（１号→パート（再拡大））のオープンに失敗しました" << endl;
			exit(1);
		}
		fprintf( fp_settei , "外枠ファイル（１号→パート（再拡大））   %s\n" , filename );
		
		sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-37.csv" , SOTOWAKU_JURAI , SOTOWAKU_JURAI );
		if( ( fp_sotowaku_part_jurai[2] = fopen( filename , "r" ) ) == NULL )
		{
			cout << "外枠ファイル（１号→パート（再拡大））のオープンに失敗しました" << endl;
			exit(1);
		}
		fprintf( fp_settei , "外枠ファイル（１号→パート（再拡大））   %s\n" , filename );
		
		// ３号→パートとなった者
		sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-38.csv" , SOTOWAKU , SOTOWAKU );
		if( ( fp_sotowaku_part[3] = fopen( filename , "r" ) ) == NULL )
		{
			cout << "外枠ファイル（３号→パート（再拡大））のオープンに失敗しました" << endl;
			exit(1);
		}
		fprintf( fp_settei , "外枠ファイル（３号→パート（再拡大））   %s\n" , filename );
		
		sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-38.csv" , SOTOWAKU_JURAI , SOTOWAKU_JURAI );
		if( ( fp_sotowaku_part_jurai[3] = fopen( filename , "r" ) ) == NULL )
		{
			cout << "外枠ファイル（３号→パート（再拡大））のオープンに失敗しました" << endl;
			exit(1);
		}
		fprintf( fp_settei , "外枠ファイル（３号→パート（再拡大））   %s\n" , filename );
	}
	
	// 経済要素
	sprintf( filename , "/rev26/emp/data/u-rev/econ/econ-%s.csv" , ECON );
	if( ( fp_econ = fopen( filename , "r" ) ) == NULL )
	{
		cout << "経済要素ファイルのオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "経済ファイル %s\n" , filename );
	
	// 納付率関係
	// 足下の年齢別納付率ファイル
	if( ( fp_noufu_menjo_wariai = fopen( NOUFU_MENJO , "r" ) ) == NULL )
	{
		cout << "足下の年齢別納付率ファイルのオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "足下納付率   %s\n" , NOUFU_MENJO );
	
	// 納付率前提ファイル
	if( Noufuritu_Zentei == 0 )
	{
		if( ( fp_mokuhyounoufu = fopen( MOKUHYO_NOUFU65 , "r" ) ) == NULL )
		{
			cout << "納付率前提ファイルのオープンに失敗しました" << endl;
			exit(1);
		}
		fprintf( fp_settei , "納付率前提ファイル   %s\n" , MOKUHYO_NOUFU65 );
	}
	else if( Noufuritu_Zentei == 1 )
	{
		if( ( fp_mokuhyounoufu = fopen( MOKUHYO_NOUFU60 , "r" ) ) == NULL )
		{
			cout << "納付率前提ファイルのオープンに失敗しました" << endl;
			exit(1);
		}
		fprintf( fp_settei , "納付率前提ファイル   %s\n" , MOKUHYO_NOUFU60 );
	}
	
	// 生命表ファイル読み込み
	if( ( fp_lifetable = fopen( LIFE_TABLE , "r" ) ) == NULL )
	{
		cout << "生命表ファイルのオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "生命表   %s\n" , LIFE_TABLE );
	fprintf( fp_settei , "\tSHIKKENRITU_MIN:%d, SHIKKENRITU_MAX:%d\n" , SHIKKENRITU_MIN, SHIKKENRITU_MAX );
	
	// 出力ファイル
	// 基礎年金ファイル
	sprintf( filename , "/rev26/nat/data/KISONENKIN%s" , Version );
	if( ( fp_kisonenkin = fopen( filename , "w" ) ) == NULL )
	{
		cout << "基礎年金ファイルのオープンに失敗しました" << endl;
		exit(1);
	}
	
	// 独自給付ファイル
	sprintf( filename , "/rev26/nat/data/DOKUZI%s.csv" , Version );
	if( ( fp_dokuzi = fopen( filename , "w" ) ) == NULL )
	{
		cout << "独自給付ファイルのオープンに失敗しました" << endl;
		exit(1);
	}
	
	// 改定率ファイル
	sprintf( filename , "/rev26/nat/data/KOKUKAITE-%sE.csv" , ECON );
	if( ( fp_kaitei = fopen( filename , "w" ) ) == NULL )
	{
		cout << "改定率ファイル（特例解消）のオープンに失敗しました" << endl;
		exit(1);
	}
	
	// 結果出力用
	sprintf( filename , "/rev26/nat/rslt/HIHO%s.csv" , Version );
	if( ( fp_printout[0] = fopen( filename,"w" ) ) == NULL )
	{
		cout << "年次別結果ファイル(被保険者)のオープンに失敗しました" << endl;
		exit(1);
	}
	
	sprintf( filename , "/rev26/nat/rslt/ROREI%s.csv" , Version );
	if( ( fp_printout[1] = fopen( filename , "w" ) ) == NULL )
	{
		cout << "年次別結果ファイル(老齢)のオープンに失敗しました" << endl;
		exit(1);
	}
	
	sprintf( filename , "/rev26/nat/rslt/SHOGAI%s.csv" , Version );
	if( ( fp_printout[2] = fopen(filename , "w" ) ) == NULL )
	{
		cout << "年次別結果ファイル(障害)のオープンに失敗しました" << endl;
		exit(1);
	}
	
	sprintf( filename , "/rev26/nat/rslt/IZOKU%s.csv" , Version );
	if( ( fp_printout[3] = fopen( filename , "w" ) ) == NULL )
	{
		cout << "年次別結果ファイル(遺族)のオープンに失敗しました" << endl;
		exit(1);
	}
	
	// 経年変化用ファイル
	// 老齢年金発生割合用
	if( ( fp_rorei_keinen = fopen( ROREI_KEINEN , "r" ) ) == NULL )
	{
		cout << "老齢年金発生割合用経年変化率ファイルのオープンに失敗しました" << endl;
		exit(1);
	}
	// 遺族年金用有遺族率
	if( ( fp_izoku_keinen = fopen( IZOKU_KEINEN , "r" ) ) == NULL )
	{
		cout << "遺族年金発生割合用経年変化率（有遺族率）ファイルのオープンに失敗しました" << endl;
		exit(1);
	}
}
