import type { FinancialsModel } from '../../../Pages/Financials/Components/FinancialsForm/FinancialsForm.helper';

interface CashFlowAnalysisPerspectiveHelperInterface {
	calculatedAssetsTurnoverFirst: number;
	calculatedAssetsTurnoverSecond: number;
	calculatedAssetsTurnoverChange: number;
	calculatedOtherCapitalSecondFinancial: number;
	calculatedOtherCapitalThirdFinancial: number;
	calculateOtherCapitalChange: number;
	calculatedReturnOnCapitalFirst: number;
	calculatedReturnOnCapitalSecond: number;
	calculatedReturnOnCapitalChange: number;
	calculatedReturnOnTotalAssetsFirst: number;
	calculatedReturnOnTotalAssetsSecond: number;
	calculatedReturnOnTotalAssetsChange: number;
	calculatedReturnOnEquityFirst: number;
	calculatedReturnOnEquitySecond: number;
	calculatedReturnOnEquityChange: number;
	calculatedNetOperatingAssetsFirst: number;
	calculatedNetOperatingAssetsSecond: number;
	calculatedNetOperatingAssetsChange: number;
	calculatedNetProfitPreTaxFirst: number;
	calculatedNetProfitPreTaxSecond: number;
	calculatedNetProfitPreTaxChange: number;
}

function cashFlowAnalysisPerspectiveCalculationsHelper(
	secondFinancial: FinancialsModel,
	thirdFinancial: FinancialsModel
): CashFlowAnalysisPerspectiveHelperInterface {
	const calculatedAssetsTurnoverFirst =
		+secondFinancial.input.Revenue /
		(+secondFinancial.input['Additional Total Assets'] -
			+secondFinancial.input['Additional Total Liabilities'] +
			+secondFinancial.input['Additional Bank Loans - Current'] +
			+secondFinancial.input['Additional Bank Loans - Non Current']);
	const calculatedAssetsTurnoverSecond =
		+thirdFinancial.input.Revenue /
		(+thirdFinancial.input['Additional Total Assets'] -
			+thirdFinancial.input['Additional Total Liabilities'] +
			+thirdFinancial.input['Additional Bank Loans - Current'] +
			+thirdFinancial.input['Additional Bank Loans - Non Current']);
	const calculatedAssetsTurnoverChange =
		((calculatedAssetsTurnoverSecond - calculatedAssetsTurnoverFirst) /
			calculatedAssetsTurnoverFirst) *
		100;
	const calculatedOtherCapitalSecondFinancial =
		+secondFinancial.input['Additional Fixed Assets'] +
		(+secondFinancial.input['Additional Total Assets'] -
			+secondFinancial.input['Additional Fixed Assets'] -
			+secondFinancial.input.Stock -
			+secondFinancial.input['Trade Debtors'] -
			+secondFinancial.input['Cash at Bank']) -
		(+secondFinancial.input['Additional Total Liabilities'] -
			+secondFinancial.input['Deferred Revenue'] -
			+secondFinancial.input['Trade Creditors'] -
			+secondFinancial.input['Additional Bank Loans - Current'] -
			+secondFinancial.input['Additional Bank Loans - Non Current']);
	const calculatedOtherCapitalThirdFinancial =
		+thirdFinancial.input['Additional Fixed Assets'] +
		(+thirdFinancial.input['Additional Total Assets'] -
			+thirdFinancial.input['Additional Fixed Assets'] -
			+thirdFinancial.input.Stock -
			+thirdFinancial.input['Trade Debtors'] -
			+thirdFinancial.input['Cash at Bank']) -
		(+thirdFinancial.input['Additional Total Liabilities'] -
			+thirdFinancial.input['Deferred Revenue'] -
			+thirdFinancial.input['Trade Creditors'] -
			+thirdFinancial.input['Additional Bank Loans - Current'] -
			+thirdFinancial.input['Additional Bank Loans - Non Current']);
	const calculateOtherCapitalChange =
		calculatedOtherCapitalThirdFinancial - calculatedOtherCapitalSecondFinancial;
	console.log('>>>> CALCULATED OTHER CAPITAL CHANGE', calculateOtherCapitalChange);
	const calculatedReturnOnCapitalFirst =
		((+secondFinancial.input.EBIT -
			+secondFinancial.input['Interest Paid'] +
			+secondFinancial.input['Other Income']) /
			(+secondFinancial.input['Additional Total Assets'] -
				+secondFinancial.input['Additional Total Liabilities'] +
				+secondFinancial.input['Additional Bank Loans - Current'] +
				+secondFinancial.input['Additional Bank Loans - Non Current'])) *
		100;
	const calculatedReturnOnCapitalSecond =
		((+thirdFinancial.input.EBIT -
			+thirdFinancial.input['Interest Paid'] +
			+thirdFinancial.input['Other Income']) /
			(+thirdFinancial.input['Additional Total Assets'] -
				+thirdFinancial.input['Additional Total Liabilities'] +
				+thirdFinancial.input['Additional Bank Loans - Current'] +
				+thirdFinancial.input['Additional Bank Loans - Non Current'])) *
		100;
	const calculatedReturnOnCapitalChange =
		((calculatedReturnOnCapitalSecond - calculatedReturnOnCapitalFirst) /
			calculatedReturnOnCapitalFirst) *
		100;

	const calculatedReturnOnTotalAssetsFirst =
		(+secondFinancial.input.EBIT / +secondFinancial.input['Additional Total Assets']) * 100;
	const calculatedReturnOnTotalAssetsSecond =
		(+thirdFinancial.input.EBIT / +thirdFinancial.input['Additional Total Assets']) * 100;
	const calculatedReturnOnTotalAssetsChange =
		((calculatedReturnOnTotalAssetsSecond - calculatedReturnOnTotalAssetsFirst) /
			calculatedReturnOnTotalAssetsFirst) *
		100;
	const calculatedReturnOnEquityFirst =
		(+secondFinancial.input['Net Profit'] /
			(+secondFinancial.input['Additional Total Assets'] -
				+secondFinancial.input['Additional Total Liabilities'])) *
		100;
	const calculatedReturnOnEquitySecond =
		(+thirdFinancial.input['Net Profit'] /
			(+thirdFinancial.input['Additional Total Assets'] -
				+thirdFinancial.input['Additional Total Liabilities'])) *
		100;
	const calculatedReturnOnEquityChange =
		((calculatedReturnOnEquitySecond - calculatedReturnOnEquityFirst) /
			calculatedReturnOnEquityFirst) *
		100;
	const calculatedNetOperatingAssetsFirst =
		+secondFinancial.input['Additional Total Assets'] -
		+secondFinancial.input['Additional Total Liabilities'] +
		+secondFinancial.input['Additional Bank Loans - Current'] +
		+secondFinancial.input['Additional Bank Loans - Non Current'];
	const calculatedNetOperatingAssetsSecond =
		+thirdFinancial.input['Additional Total Assets'] -
		+thirdFinancial.input['Additional Total Liabilities'] +
		+thirdFinancial.input['Additional Bank Loans - Current'] +
		+thirdFinancial.input['Additional Bank Loans - Non Current'];
	const calculatedNetOperatingAssetsChange =
		((calculatedNetOperatingAssetsSecond - calculatedNetOperatingAssetsFirst) /
			calculatedNetOperatingAssetsFirst) *
		100;
	const calculatedNetProfitPreTaxFirst =
		+secondFinancial.input.EBIT -
		+secondFinancial.input['Interest Paid'] +
		+secondFinancial.input['Other Income'];
	const calculatedNetProfitPreTaxSecond =
		+thirdFinancial.input.EBIT -
		+thirdFinancial.input['Interest Paid'] +
		+thirdFinancial.input['Other Income'];
	const calculatedNetProfitPreTaxChange =
		((calculatedNetProfitPreTaxSecond - calculatedNetProfitPreTaxFirst) /
			calculatedNetProfitPreTaxFirst) *
		100;

	return {
		calculatedAssetsTurnoverFirst,
		calculatedAssetsTurnoverSecond,
		calculatedAssetsTurnoverChange,
		calculatedOtherCapitalSecondFinancial,
		calculatedOtherCapitalThirdFinancial,
		calculateOtherCapitalChange,
		calculatedReturnOnCapitalFirst,
		calculatedReturnOnCapitalSecond,
		calculatedReturnOnCapitalChange,
		calculatedReturnOnTotalAssetsFirst,
		calculatedReturnOnTotalAssetsSecond,
		calculatedReturnOnTotalAssetsChange,
		calculatedReturnOnEquityFirst,
		calculatedReturnOnEquitySecond,
		calculatedReturnOnEquityChange,
		calculatedNetOperatingAssetsFirst,
		calculatedNetOperatingAssetsSecond,
		calculatedNetOperatingAssetsChange,
		calculatedNetProfitPreTaxFirst,
		calculatedNetProfitPreTaxSecond,
		calculatedNetProfitPreTaxChange
	};
}
export default cashFlowAnalysisPerspectiveCalculationsHelper;
