public Map<Date, Double> toBill(Date registrationDate, String plan, int textCount, String options,
			String payAsYouGoLevel, int callTime, String country) {
		System.out.println("Starting billing for plan: " + plan + " texts counts: " + textCount + " call time: "
				+ callTime);
		System.out.println("Country: " + country);
		this.country = country;
		Map<Date, Double> fees = new HashMap<Date, Double>();
		try {
			if (plan != null && plan.startsWith("FLX")) {
				fees = flexi(registrationDate, plan, textCount, options, payAsYouGoLevel, callTime);
			} else if (payAsYouGoLevel != null) {
				fees = payAsYouGo(registrationDate, payAsYouGoLevel, textCount, options, callTime);
			} else {
				fees = monthlyFee(registrationDate, plan, textCount, options, callTime);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		try {
			if (plan != null && plan.startsWith("BIZ")) {
				addMultiCallsOption(options, fees, true);
			} else {
				addMultiCallsOption(options, fees, false);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		try {
			fees = addCreditCardCommission(fees, options);
		} catch (Exception e) {
			e.printStackTrace();
		}

		System.out.println("Done billing: " + fees);
		return fees;
	}