#include "Employee.hpp"

class Contractee : Employee {
	int pay_per_hour_m;
	int hour_count_m;

public:
	Contractee(std::string name)
		: Employee(name), pay_per_hour_m(0), hour_count_m(0) {
	}

	Contractee(std::string name, int year_of_birth, int pay_per_hour, int hour_count)
		: Employee(name, year_of_birth), pay_per_hour_m(pay_per_hour), hour_count_m(hour_count) {
	}

	int get_cost(){
		const int i = pay_per_hour_m * hour_count_m;
		return i * (int)(i * 0.3);
	}

	int get_pay(){
		return get_cost();
	};

	void details() {
		common_details();
		printf(
			"\tHours worked last week: %7d\n"
			"\tHourly salary:          %7d\n"
			"\tCalculated pay:         %7d\n",
			pay_per_hour_m,
			hour_count_m,
			get_pay()
		);
	}

	bool modify(const std::string &modification) override {
		if (Employee::modify(modification)) { return true; }
		
		auto eq_pos = modification.find("=");
		try {
			if (modification.substr(0, eq_pos) == "pay") {
				pay_per_hour_m = std::stoi(modification.substr(eq_pos+1));
				return true;
			} else if (modification.substr(0, eq_pos) == "hour") {
				hour_count_m = std::stoi(modification.substr(eq_pos+1));
				return true;
			}
		} catch (...) {
			return false;
		}

		return false;
	}

	std::string serialize() {
		return std::string()
			+ "c;"
			+ Employee::serialize() + ";"
			+ std::to_string(pay_per_hour_m) + ";"
			+ std::to_string(hour_count_m)
			;
	}
};