#include "model/recipe/ingredients/recipeingredient.h"

RecipeIngredient::RecipeIngredient(string name, string foodGroup, float quantity, UnitOfMeasure unit, string comment) : Ingredient(name, foodGroup){
    setQuantity(quantity);
    setUnit(unit);
	setComment(comment);
}

RecipeIngredient::RecipeIngredient(Ingredient i, float quantity, UnitOfMeasure unit, string comment){
    setName(i.getName());
    setFoodGroup(i.getFoodGroup());
    setQuantity(quantity);
	setUnit(unit);
	setComment(comment);
}

RecipeIngredient::RecipeIngredient(Ingredient &i) : RecipeIngredient(i, 0.0f, UnitOfMeasure("bleh"), "Fuck"){
	//Constructs recipe ingredient from ingredient which is a hidden recipe ingredient.
}

RecipeIngredient::RecipeIngredient(){

}

float RecipeIngredient::getQuantity() const{
    return this->quantity;
}

UnitOfMeasure RecipeIngredient::getUnit() const{
    return this->unit;
}

string RecipeIngredient::getComment() const{
    return this->comment;
}

void RecipeIngredient::setQuantity(float newQuantity){
    this->quantity = newQuantity;
}

void RecipeIngredient::setUnit(UnitOfMeasure newUnit){
    this->unit = newUnit;
}

void RecipeIngredient::setComment(string newComment){
	this->comment = newComment;
}

string RecipeIngredient::toString(){
	string result;
	if (std::ceil(this->getQuantity()) == this->getQuantity()){
		result += std::to_string((int)this->getQuantity());
	} else {
		result += StringUtils::toString(this->getQuantity());
	}
	result += " " + this->getUnit().getAbbreviation() + " " + this->getName();
	if (!this->getComment().empty()) result += " (" + this->getComment() + ")";

	return result;
}
