package us.deans.incomeanalyser;

public class IncomeAnalyzer_Engine_001 implements IncomeAnalyser_Engine {

	private double fed_ss_rate = .1240;
	private double fed_ss_limit = 106800;
	private double fed_oasdi_rate = 0.0145;
	
	
	public IncomeAnalyzer_Engine_001(){
	}
	
	public void calculate(IncomeAnalyser_Model model) {
		
		model.setAnnualGross(model.getHourlyRate()*1900);
		model.setFedOASDITax(model.getAnnualGross()* fed_oasdi_rate);
		
		double totalGross = model.getAnnualGross();
		
		// calculate SS Amount
		if (model.getTaxForm().equals("W2")){
			model.setFedSSTax((totalGross*fed_ss_rate)*0.5);
		}
		if (model.getTaxForm().equals("1099")){
			model.setFedSSTax((totalGross*fed_ss_rate));
		}
		if (model.getFedSSTax() > fed_ss_limit) model.setFedSSTax(fed_ss_limit); 

		
		if (model.getTaxForm().equals("W2")) {
			if (model.getFilingStatus().equals("M")){
				System.out.println("filing status is 'M'");
				if (totalGross < 373650) model.setTaxRate(.35);	
				if (totalGross < 209250) model.setTaxRate(.33);
				if (totalGross < 137300) model.setTaxRate(.28);				
				if (totalGross < 68000) model.setTaxRate(.25); 
				if (totalGross < 16750) model.setTaxRate(.15); 
			}
			if (model.getFilingStatus().equals("S")){
				if (totalGross < 373650) model.setTaxRate(.35);			
				if (totalGross < 171850) model.setTaxRate(.33);
				if (totalGross < 82400) model.setTaxRate(.28);
				if (totalGross < 34000) model.setTaxRate(.25);
				if (totalGross < 8375) model.setTaxRate(.15);
				
			}
		}
		
		model.setFedIncomeTax(totalGross*model.getTaxRate());

		double taxRate = model.getTaxRate();
		double afterIncomeTax = totalGross - (totalGross*taxRate);
		double afterFICATax = afterIncomeTax - (model.getFedOASDITax()+model.getFedSSTax());
		
		model.setMonthlyNet(afterFICATax/12);
		
	}
	

	
}
