/**************************************
*                                     *
*             妻積みの計算            *
*                                     *
*                                     *
**************************************/

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

void tumatumi_cal()
{
	// 変数宣言
	int nendo;
	int seido;
	int counter;
	double i_rate_genka[SAISHUNENDO - SHONENDO + 1];
	
	// 初期化
	for( nendo = SHONENDO ; nendo <= TUMATUMI_NENDO - 1 ; nendo++ )
	{
		i_rate_tumatumi[nendo - SHONENDO] = 1.;
	}
	for( nendo = TUMATUMI_NENDO ; nendo <= SAISHUNENDO ; nendo++ )
	{
		i_rate_tumatumi[nendo - SHONENDO] = interest_rate[nendo - ECON_SHONENDO] - 0.004;
		
		if( i_rate_tumatumi[nendo - SHONENDO] < 0.0 )
		{
			printf("妻積用利率がマイナスです。経済前提を見直してください。");
			exit( 1 );
		}
	}
	
	// 原価割戻し用関数のセット
	// 初期化
	for( nendo = SHONENDO ; nendo <= SAISHUNENDO ; nendo++ )
	{
		i_rate_genka[nendo - SHONENDO] = 1.;
	}
	
	for( nendo = TUMATUMI_NENDO ; nendo <= TUMATUMI_NENDO + TUMATUMI_KIKAN - 1 ; nendo++ )
	{
		if( nendo == TUMATUMI_NENDO )
		{
			i_rate_genka[nendo - SHONENDO] *= pow( i_rate_tumatumi[TUMATUMI_NENDO - SHONENDO] , 4. / 12. );
		}
		else
		{
			i_rate_genka[nendo - SHONENDO] *= pow( i_rate_tumatumi[TUMATUMI_NENDO - SHONENDO] , 1. / 2. );
			
			if( nendo >= TUMATUMI_NENDO + 2 )
			{
				for( counter = TUMATUMI_NENDO + 1 ; counter <= nendo - 1 ; counter++ )
				{
					i_rate_genka[nendo - SHONENDO] *= i_rate_tumatumi[counter - SHONENDO];
				}
			}
			i_rate_genka[nendo - SHONENDO] *= pow( i_rate_tumatumi[nendo - SHONENDO] , 1. / 2. );
		}
	}
	
	// 妻積み分配額及び残額
	for( nendo = TUMATUMI_NENDO ; nendo <= TUMATUMI_NENDO + TUMATUMI_KIKAN - 1 ; nendo++ )
	{
		if( nendo == 2015 )
		{
			Tumatumi[BUNPAI][nendo - SHONENDO]
			 = Tumatumi[SUM][nendo - 1 - SHONENDO]
			 * ( 1. / ( TUMATUMI_NENDO + TUMATUMI_KIKAN - nendo ) + pow( i_rate_tumatumi[nendo - SHONENDO] , 4. / 12. ) - 1 );
		}
		else if( nendo == 2016 )
		{
			Tumatumi[BUNPAI][nendo - SHONENDO]
			 = Tumatumi[SUM][nendo - 1 - SHONENDO]
			 * ( 1. / ( TUMATUMI_NENDO + TUMATUMI_KIKAN - nendo )
			   + pow( i_rate_tumatumi[nendo - 1 - SHONENDO] , 2. / 12. ) * pow( i_rate_tumatumi[nendo - SHONENDO] , 6. / 12. ) - 1 );
		}
		else if( nendo >= 2017 )
		{
			Tumatumi[BUNPAI][nendo - SHONENDO]
			 = Tumatumi[SUM][nendo - 1 - SHONENDO]
			 * ( 1. / ( TUMATUMI_NENDO + TUMATUMI_KIKAN - nendo )
			   + pow( i_rate_tumatumi[nendo - 1 - SHONENDO] , 6. / 12. ) * pow( i_rate_tumatumi[nendo - SHONENDO] , 6. / 12. ) - 1 );
		}
		Tumatumi[SUM][nendo - SHONENDO]
		 = Tumatumi[SUM][nendo - 1 - SHONENDO] * ( TUMATUMI_NENDO + TUMATUMI_KIKAN - 1 - nendo )
		 / ( TUMATUMI_NENDO + TUMATUMI_KIKAN - nendo );
	}
	
	// 各制度に分配
	for( nendo = TUMATUMI_NENDO ; nendo <= TUMATUMI_NENDO + TUMATUMI_KIKAN - 1 ; nendo++ )
	{
		// 国年
		Tumatumi[KOKUNEN][nendo - SHONENDO]
		 = Tumatumi[BUNPAI][nendo - SHONENDO] / 2. * SanteiTaishou[KOKUNEN][nendo - SHONENDO][1]
		 / SanteiTaishou[SUM][nendo - SHONENDO][SUM];
		
		// 被用者
		for( seido = KOUNEN ; seido <= SHIGAKU ; seido++ )
		{
			Tumatumi[seido][nendo - SHONENDO]
			 = Tumatumi[BUNPAI][nendo - SHONENDO] / 2.
 			 * ( SanteiTaishou[seido][nendo - SHONENDO][SUM] / SanteiTaishou[SUM][nendo - SHONENDO][SUM]
			   + ( ( SanteiTaishou[seido][nendo - SHONENDO][2] + SanteiTaishou[seido][nendo - SHONENDO][3] )
			     / ( SanteiTaishou[SUM][nendo - SHONENDO][2] + SanteiTaishou[SUM][nendo - SHONENDO][3] ) ) );
		}
	}
	
	// 原価
	for( nendo = TUMATUMI_NENDO ; nendo <= TUMATUMI_NENDO + TUMATUMI_KIKAN - 1 ; nendo++ )
	{
		for( seido = KOUNEN ; seido <= SHIGAKU ; seido++ )
		{
			Tumatumi[seido][TUMATUMI_NENDO - 1 - SHONENDO] += Tumatumi[seido][nendo - SHONENDO] / i_rate_genka[nendo - SHONENDO];
		}
	}
	
	// 出力
	fprintf( fp_tumatumi , "%d,,,,,,\n" , TUMATUMI_NENDO - 1 - 2000 );
	for( nendo = TUMATUMI_NENDO ; nendo <= SAISHUNENDO ; nendo++ )
	{
		fprintf( fp_tumatumi , "%d," , nendo - 2000 );
		for( seido = KOKUNEN ; seido <= SHIGAKU ; seido++ )
		{
			fprintf( fp_tumatumi , "%20.14e," , Tumatumi[seido][nendo - SHONENDO] );
		}
		fprintf( fp_tumatumi , "%20.14e\n" , Tumatumi[SUM][nendo - SHONENDO] );
	}
}

