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

export type FinancialData = {
	calculatedEbit: number;
	grossProfit: number;
	lessCogs: number;
	lessOverheads: number;
	earningsBeforeTax: number;
	lessOtherIncome: number;
	lessTax: number;
	lessInterest: number;
	lessDividend: number;
	retainedProfit: number;
	shortfall: number;
	banksLendFromEbitda: number;
	requiredWorkingCapital: number;
	cashFlowOnGrowth: number;
	borrowMoney: number;
	debtToEquityRatio: number;
	preTaxProfit: number;
};

export const moneyForGrowthCalculations = (
	input: FinancialsInterface,
	increasedRevenueUpdated: number
): FinancialData => {
	const {
		COGS,
		Revenue,
		EBIT,
		Dividends,
		'Other Income': otherIncome,
		'Interest Paid': interestPaid,
		'Net Profit': netProfit,
		'Trade Debtors': tradeDebtors,
		'Trade Creditors': tradeCreditors,
		'Deferred Revenue': deferredRevenue,
		Depreciation,
		Stock,
		'Additional Bank Loans - Current': additionalBankLoansCurrent,
		'Additional Bank Loans - Non Current': additionalBankLoansNonCurrent,
		'Additional Total Assets': additionalTotalAssets,
		'Additional Total Liabilities': additionalTotalLiabilities
	} = input;
	const calculatedEbit = (+EBIT / +Revenue) * increasedRevenueUpdated;

	const calculatedGrossProfit = (+input['Gross Profit'] / +Revenue) * increasedRevenueUpdated;
	const calculatedLessCogs = (+COGS / +Revenue) * increasedRevenueUpdated;
	const calculatedLessOverheads =
		((+input['Gross Profit'] - +EBIT) / +Revenue) * increasedRevenueUpdated;
	const calculatedLessOtherIncome = (+otherIncome / +Revenue) * increasedRevenueUpdated;
	const calculatedLessDividends = (+Dividends / +Revenue) * increasedRevenueUpdated;
	const calculatedLessInterest = (+interestPaid / +Revenue) * increasedRevenueUpdated;
	const calculatedLessTax =
		((+EBIT - +interestPaid + +otherIncome - +netProfit) / +Revenue) * increasedRevenueUpdated;
	const calculatedRetainedProfit =
		+calculatedEbit +
		calculatedLessOtherIncome -
		calculatedLessInterest -
		calculatedLessTax -
		calculatedLessDividends;
	const calculatedWorkingCapitalOf =
		((+tradeDebtors + +Stock - +tradeCreditors - +deferredRevenue) / +Revenue) *
		increasedRevenueUpdated;

	// const calculatedBanksLendFromEbitda = calculatedEbit + increasedRevenueUpdated;
	const calculatedBanksLendFromEbitda =
		calculatedEbit + (+Depreciation / +Revenue) * increasedRevenueUpdated;
	const calculatedNetProfitPreTax =
		calculatedEbit + calculatedLessOtherIncome - calculatedLessInterest;
	const calculatedDebtToEquityRatio =
		(+additionalBankLoansCurrent + +additionalBankLoansNonCurrent) /
		(+additionalTotalAssets - +additionalTotalLiabilities);
	const calculatedBorrowMoney = calculatedRetainedProfit * calculatedDebtToEquityRatio;
	const calculatedEarningsBeforeTax =
		(+EBIT / +Revenue) * increasedRevenueUpdated +
		(+otherIncome / +Revenue) * increasedRevenueUpdated +
		((+EBIT - +interestPaid + +otherIncome - +netProfit) / +Revenue) * increasedRevenueUpdated;

	return {
		calculatedEbit,
		grossProfit: calculatedGrossProfit,
		lessCogs: calculatedLessCogs,
		lessOverheads: calculatedLessOverheads,
		earningsBeforeTax: calculatedEarningsBeforeTax,
		lessOtherIncome: calculatedLessOtherIncome,
		lessTax: calculatedLessTax,
		lessInterest: calculatedLessInterest,
		lessDividend: calculatedLessDividends,
		retainedProfit: calculatedRetainedProfit,
		shortfall: calculatedRetainedProfit - calculatedWorkingCapitalOf,
		banksLendFromEbitda: calculatedBanksLendFromEbitda,
		requiredWorkingCapital: calculatedWorkingCapitalOf,
		cashFlowOnGrowth: calculatedNetProfitPreTax - calculatedWorkingCapitalOf,
		borrowMoney: calculatedBorrowMoney,
		debtToEquityRatio: calculatedDebtToEquityRatio,
		preTaxProfit: calculatedNetProfitPreTax
	};
};
