/***************************************
*                                      *
*            外枠の読み込み            *
*                                      *
*                                      *
***************************************/

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

int encho_year( int a );

void waku()
{
	// 変数宣言
	int nendo;
	int sotai_nendo;
	int nenrei;
	int seibetu;
	int seido;
	int goubetu;
	int counter;
	int counter2;
	int waku_seido;
	int waku_seido_p;
	double Santei_Part[6][4][3][2];
	double buffer[BUFFER_MAX];
	int data_number;
	
	using namespace std;
	
	// 初期化
	for( seido = SUM ; seido <= SHIGAKU ; seido++ )
	{
		for( goubetu = SUM ; goubetu <= 3 ; goubetu++ )
		{
			for( counter = 0 ; counter <= 2 ; counter++ )
			{
				for( counter2 = 0 ; counter2 <= 1 ; counter2++ )
				{
					Santei_Part[seido][goubetu][counter][counter2] = 0.;
				}
			}
		}
	}
	
	
	// 外枠ファイルより読み込み
	for( waku_seido = 0 ; waku_seido <= 15 ; waku_seido++ )
	{
		for( counter = 1 ; counter <= 2 ; counter++ )
		{
			read_data( buffer , fp_sotowaku[waku_seido] , &data_number );
		}
		for( seibetu = SUM ; seibetu <= ONNA ; seibetu++ )
		{
			for( nendo = SOTOWAKU_SHONENDO ; nendo <= SAISHUNENDO ; nendo++ )
			{
				if( read_data( buffer , fp_sotowaku[waku_seido] , &data_number ) != EOF && buffer[1] == seibetu && buffer[2] == nendo )
				{
					if( seibetu >= OTOKO && nendo >= SHONENDO )
					{
						if( Option3 == 0 )
						{
							if( waku_seido == 0 )
							{
								Hiho_Kokunen[nendo - SHONENDO] += buffer[3];
							}
 							else if( waku_seido == 1 )
							{
								for( nenrei = MIN_HIHO_NENREI - 11 ; nenrei <= 59 - 11 ; nenrei++ )
								{
									SanteiTaishou[KOUNEN][nendo - SHONENDO][2] += buffer[nenrei];
								}
							}
 							else if( waku_seido <= 4 )
							{
								for( nenrei = MIN_HIHO_NENREI - 11 ; nenrei <= 59 - 11 ; nenrei++ )
								{
									SanteiTaishou[waku_seido + 1][nendo - SHONENDO][2] += buffer[nenrei];
								}
							}
 							else if( waku_seido == 5 || waku_seido == 6 )
							{
								for( nenrei = MIN_HIHO_NENREI - 11 ; nenrei <= 59 - 11 ; nenrei++ )
								{
									SanteiTaishou[KOUNEN][nendo - SHONENDO][3] += buffer[nenrei];
								}
							}
	 						else if( waku_seido <= 9 )
							{
								for( nenrei = MIN_HIHO_NENREI - 11 ; nenrei <= 59 - 11 ; nenrei++ )
								{
									SanteiTaishou[waku_seido - 4][nendo - SHONENDO][3] += buffer[nenrei];
								}
							}
 							else if( waku_seido <= 12 )
							{
								for( nenrei = MIN_HIHO_NENREI - 11 ; nenrei <= 59 - 11 ; nenrei++ )
								{
									SanteiTaishou[waku_seido - 4][nendo - SHONENDO][2] += buffer[nenrei];
								}
							}
 							else
							{
								for( nenrei = MIN_HIHO_NENREI - 11 ; nenrei <= 59 - 11 ; nenrei++ )
								{
									SanteiTaishou[waku_seido - 7][nendo - SHONENDO][3] += buffer[nenrei];
								}
							}
						}
						if( Option3 == 1 )
						{
							if( waku_seido == 0 )
							{
								Hiho_Kokunen[nendo - SHONENDO] += buffer[3];
							}
 							else if( waku_seido == 1 )
							{
								for( nenrei = MIN_HIHO_NENREI - 11 ; nenrei <= 59 - 11 + encho_year( nendo ) ; nenrei++ )
								{
									SanteiTaishou[KOUNEN][nendo - SHONENDO][2] += buffer[nenrei];
								}
							}
 							else if( waku_seido <= 4 )
							{
								for( nenrei = MIN_HIHO_NENREI - 11 ; nenrei <= 59 - 11 + encho_year( nendo ) ; nenrei++ )
								{
									SanteiTaishou[waku_seido + 1][nendo - SHONENDO][2] += buffer[nenrei];
								}
							}
 							else if( waku_seido == 5 || waku_seido == 6 )
							{
								for( nenrei = MIN_HIHO_NENREI - 11 ; nenrei <= 59 - 11 + encho_year( nendo ) ; nenrei++ )
								{
									SanteiTaishou[KOUNEN][nendo - SHONENDO][3] += buffer[nenrei];
								}
							}
	 						else if( waku_seido <= 9 )
							{
								for( nenrei = MIN_HIHO_NENREI - 11 ; nenrei <= 59 - 11 + encho_year( nendo ) ; nenrei++ )
								{
									SanteiTaishou[waku_seido - 4][nendo - SHONENDO][3] += buffer[nenrei];
								}
							}
 							else if( waku_seido <= 12 )
							{
								for( nenrei = MIN_HIHO_NENREI - 11 ; nenrei <= 59 - 11 + encho_year( nendo ) ; nenrei++ )
								{
									SanteiTaishou[waku_seido - 4][nendo - SHONENDO][2] += buffer[nenrei];
								}
							}
 							else
							{
								for( nenrei = MIN_HIHO_NENREI - 11 ; nenrei <= 59 - 11 + encho_year( nendo ) ; nenrei++ )
								{
									SanteiTaishou[waku_seido - 7][nendo - SHONENDO][3] += buffer[nenrei];
								}
							}
						}
					}
				}
				else
				{
					printf( "外枠ファイル読込中にＥＯＦを検出しました。枠制度番号は %d\n" , waku_seido );
					exit( 1 );
				}
			}
		}
	}
	
	// パート適用拡大
	for( waku_seido_p = 0 ; waku_seido_p <= 5 ; waku_seido_p++ )
	{
		for( counter = 1 ; counter <= 2 ; counter++ )
		{
			read_data( buffer , fp_sotowaku_part[waku_seido_p] , &data_number );
		}
		for( seibetu = 0 ; seibetu <= 2 ; seibetu++ )
		{
			for( nendo = SOTOWAKU_SHONENDO ; nendo <= SAISHUNENDO ; nendo++ )
			{
				read_data( buffer , fp_sotowaku_part[waku_seido_p] , &data_number );
				if( seibetu >= 1 )
				{
					if( nendo == 2016 - 1 )
					{
						if( waku_seido_p == 0 )
						{
							Santei_Part[KOKUNEN][1][1][0] += buffer[3];
						}
						else if( waku_seido_p == 1 )
						{
							for( nenrei = MIN_HIHO_NENREI - 11 ; nenrei <= 59 - 11 + encho_year( nendo ) ; nenrei++ )
							{
								Santei_Part[KOUNEN][2][1][0] += buffer[nenrei];
							}
						}
						else
						{
							Santei_Part[waku_seido_p][3][1][0] += buffer[3];
						}
					}
					if( nendo == 2016 )
					{
						if( waku_seido_p == 0 )
						{
							Santei_Part[KOKUNEN][1][1][1] += buffer[3];
						}
						else if( waku_seido_p == 1 )
						{
							for( nenrei = MIN_HIHO_NENREI - 11 ; nenrei <= 59 - 11 + encho_year( nendo ) ; nenrei++ )
							{
								Santei_Part[KOUNEN][2][1][1] += buffer[nenrei];
							}
						}
						else
						{
							Santei_Part[waku_seido_p][3][1][1] += buffer[3];
						}
					}
					if( nendo == 2024 - 1 )
					{
						if( waku_seido_p == 0 )
						{
							Santei_Part[KOKUNEN][1][2][0] -= buffer[3];
						}
						else if( waku_seido_p == 1 )
						{
							for( nenrei = MIN_HIHO_NENREI - 11 ; nenrei <= 59 - 11 + encho_year( nendo ) ; nenrei++ )
							{
								Santei_Part[KOUNEN][2][2][0] -= buffer[nenrei];
							}
						}
						else
						{
							Santei_Part[waku_seido_p][3][2][0] -= buffer[3];
						}
					}
					if( nendo == 2024 )
					{
						if( waku_seido_p == 0 )
						{
							Santei_Part[KOKUNEN][1][2][1] -= buffer[3];
						}
						else if( waku_seido_p == 1 )
						{
							for( nenrei = MIN_HIHO_NENREI - 11 ; nenrei <= 59 - 11 + encho_year( nendo ) ; nenrei++ )
							{
								Santei_Part[KOUNEN][2][2][1] -= buffer[nenrei];
							}
						}
						else
						{
							Santei_Part[waku_seido_p][3][2][1] -= buffer[3];
						}
					}
				}
			}
		}
	}
	
	if( Option2 == 1 || Option2 == 2 )
	{
		// 更なる適用拡大
		for( waku_seido_p = 6 ; waku_seido_p <= 11 ; waku_seido_p++ )
		{
			for( counter = 1 ; counter <= 2 ; counter++ )
			{
				read_data( buffer , fp_sotowaku_part[waku_seido_p] , &data_number );
			}
			for( seibetu = 0 ; seibetu <= 2 ; seibetu++ )
			{
				for( nendo = SOTOWAKU_SHONENDO ; nendo <= SAISHUNENDO ; nendo++ )
				{
					read_data( buffer , fp_sotowaku_part[waku_seido_p] , &data_number );
					if( seibetu >= 1 )
					{
						if( nendo == 2024 - 1 )
						{
							if( waku_seido_p == 6 )
							{
								Santei_Part[KOKUNEN][1][2][0] += buffer[3];
							}
							else if( waku_seido_p == 7 )
							{
								for( nenrei = MIN_HIHO_NENREI - 11 ; nenrei <= 59 - 11 + encho_year( nendo ) ; nenrei++ )
								{
									Santei_Part[KOUNEN][2][2][0] += buffer[nenrei];
								}
							}
							else
							{
								Santei_Part[waku_seido_p - 6][3][2][0] += buffer[3];
							}
						}
						if( nendo == 2024 )
						{
							if( waku_seido_p == 6 )
							{
								Santei_Part[KOKUNEN][1][2][1] += buffer[3];
							}
							else if( waku_seido_p == 7 )
							{
								for( nenrei = MIN_HIHO_NENREI - 11 ; nenrei <= 59 - 11 + encho_year( nendo ) ; nenrei++ )
								{
									Santei_Part[KOUNEN][2][2][1] += buffer[nenrei];
								}
							}
							else
							{
								Santei_Part[waku_seido_p - 6][3][2][1] += buffer[3];
							}
						}
					}
				}
			}
		}
	}
	
	// 年度間値に変換
	for( nendo = SAISHUNENDO ; nendo >= SHONENDO + 1 ; nendo-- )
	{
		sotai_nendo = nendo - SHONENDO;
		
		// 国年
		if( nendo == 2016 )
		{
			Hiho_Kokunen[sotai_nendo] = ( Hiho_Kokunen[sotai_nendo - 1] + Hiho_Kokunen[sotai_nendo] + Santei_Part[KOKUNEN][1][1][1] ) / 2.
		                              - ( Santei_Part[KOKUNEN][1][1][0] + Santei_Part[KOKUNEN][1][1][1] ) / 2. * ( 16 - 10 ) / 12.;
		}
		else if( ( Option2 == 1 || Option2 == 2 ) && nendo == 2024 )
		{
			Hiho_Kokunen[sotai_nendo] = ( Hiho_Kokunen[sotai_nendo - 1] + Hiho_Kokunen[sotai_nendo] + Santei_Part[KOKUNEN][1][2][1] ) / 2.
		                              - ( Santei_Part[KOKUNEN][1][2][0] + Santei_Part[KOKUNEN][1][2][1] ) / 2. * ( 16 - 4 ) / 12.;
		}
		else
		{
			Hiho_Kokunen[sotai_nendo] = ( Hiho_Kokunen[sotai_nendo - 1] + Hiho_Kokunen[sotai_nendo] ) / 2.;
		}
		
		// 被用者
		for( seido = KOUNEN ; seido <= SHIGAKU ; seido++ )
		{
			for( goubetu = 1 ; goubetu <= 3 ; goubetu++ )
			{
				if( nendo == 2016 )
				{
					if( seido == KOUNEN && goubetu == 2 )
					{
						SanteiTaishou[seido][sotai_nendo][goubetu]
						 = ( SanteiTaishou[seido][sotai_nendo - 1][goubetu] + SanteiTaishou[seido][sotai_nendo][goubetu] - Santei_Part[seido][goubetu][1][1] ) / 2.
						 + ( Santei_Part[seido][goubetu][1][0] + Santei_Part[seido][goubetu][1][1] ) / 2. * ( 16 - 10 ) / 12.;
					}
					else if( goubetu == 3 )
					{
						SanteiTaishou[seido][sotai_nendo][goubetu]
						 = ( SanteiTaishou[seido][sotai_nendo - 1][goubetu] + SanteiTaishou[seido][sotai_nendo][goubetu] + Santei_Part[seido][goubetu][1][1] ) / 2.
						 - ( Santei_Part[seido][goubetu][1][0] + Santei_Part[seido][goubetu][1][1] ) / 2. * ( 16 - 10 ) / 12.;
					}
					else
					{
						SanteiTaishou[seido][sotai_nendo][goubetu]
						 = ( SanteiTaishou[seido][sotai_nendo - 1][goubetu] + SanteiTaishou[seido][sotai_nendo][goubetu] ) / 2.;
					}
				}
				else if( ( Option2 == 1 || Option2 == 2 ) && nendo == 2024 )
				{
					if( seido == KOUNEN && goubetu == 2 )
					{
						SanteiTaishou[seido][sotai_nendo][goubetu]
						 = ( SanteiTaishou[seido][sotai_nendo - 1][goubetu] + SanteiTaishou[seido][sotai_nendo][goubetu] - Santei_Part[seido][goubetu][2][1] ) / 2.
						 + ( Santei_Part[seido][goubetu][2][0] + Santei_Part[seido][goubetu][2][1] ) / 2. * ( 16 - 4 ) / 12.;
					}
					else if( goubetu == 3 )
					{
						SanteiTaishou[seido][sotai_nendo][goubetu]
						 = ( SanteiTaishou[seido][sotai_nendo - 1][goubetu] + SanteiTaishou[seido][sotai_nendo][goubetu] + Santei_Part[seido][goubetu][2][1] ) / 2.
						 - ( Santei_Part[seido][goubetu][2][0] + Santei_Part[seido][goubetu][2][1] ) / 2. * ( 16 - 4 ) / 12.;
					}
					else
					{
						SanteiTaishou[seido][sotai_nendo][goubetu]
						 = ( SanteiTaishou[seido][sotai_nendo - 1][goubetu] + SanteiTaishou[seido][sotai_nendo][goubetu] ) / 2.;
					}
				}
				else
				{
					SanteiTaishou[seido][sotai_nendo][goubetu]
					 = ( SanteiTaishou[seido][sotai_nendo - 1][goubetu] + SanteiTaishou[seido][sotai_nendo][goubetu] ) / 2.;
				}
			}
		}
		// JR、JT、農林
		for( seido = JR ; seido <= NORIN ; seido++ )
		{
			for( goubetu = 1 ; goubetu <= 3 ; goubetu++ )
			{
				SanteiTaishou[seido][sotai_nendo][goubetu]
				 = ( SanteiTaishou[seido][sotai_nendo - 1][goubetu] + SanteiTaishou[seido][sotai_nendo][goubetu] ) / 2.;
			}
			// 支援額計算
			SanteiTaishou[seido][sotai_nendo][3] = SanteiTaishou[KOUNEN][sotai_nendo][3] * K_Shien[seido - JR];
		}
	}
	
	// SHONENDO 年度間値
	for( seido = KOKUNEN ; seido <= NORIN ; seido++ )
	{
		for( goubetu = 2 ; goubetu <= 3 ; goubetu++ )
		{
			SanteiTaishou[seido][SHONENDO - SHONENDO][goubetu] = 0.;
		}
	}
	Hiho_Kokunen[SHONENDO - SHONENDO] = 0.;
	
	// 集計
	for( nendo = SHONENDO ; nendo <= SAISHUNENDO ; nendo++ )
	{
		sotai_nendo = nendo - SHONENDO;
		for( seido = KOKUNEN ; seido <= NORIN ; seido++ )
		{
			for( goubetu = 1 ; goubetu <= 3 ; goubetu++ )
			{
				SanteiTaishou[seido][sotai_nendo][SUM] += SanteiTaishou[seido][sotai_nendo][goubetu];
			}
		}
		for( seido = KOKUNEN ; seido <= SHIGAKU ; seido++ )
		{
			for( goubetu = SUM ; goubetu <= 3 ; goubetu++ )
			{
				SanteiTaishou[SUM][sotai_nendo][goubetu] += SanteiTaishou[seido][sotai_nendo][goubetu];
			}
		}
	}
}


int encho_year( int a )
{
	int r;
	if( Option3 == 1 )
	{
		if( a <= 2017 )
		{
			r = 0;
		}
		if( a == 2018 || a == 2019 || a == 2020 )
		{
			r = 1;
		}
		if( a == 2021 || a == 2022 || a == 2023 )
		{
			r = 2;
		}
		if( a == 2024 || a == 2025 || a == 2026 )
		{
			r = 3;
		}
		if( a == 2027 || a == 2028 || a == 2029 )
		{
			r = 4;
		}
		if( a >= 2030 )
		{
			r = 5;
		}
	}
	else
	{
		r = 0;
	}
	return r;
}
