#include "relationChecker.h"

#include <stdio.h>


bool valueIsRelatedToReferenceValue(float referenceValue, float value, float threshold) {

	float diff;

	if (referenceValue > value)
		diff = referenceValue - value;
	else
		diff = value - referenceValue;


	//printf("referenceValue %f, value %f, diff %f,  threshold %f\n", referenceValue, value, diff, threshold);

	if (diff == 0 || (diff / referenceValue <= threshold)) {
		return true;
	}

	//printf("\nRelated Calculation:\nAverage: %f\nActualValue: %f\nDiff: %f\ndeviation: %f\nthreshold: %f\n", referenceValue, value, diff, diff / referenceValue, threshold);
	
	return false;
}


/*
bool valueIsRelatedToReferenceValueCanberra(float referenceValue, float value, float threshold) {

	float diff;

	if (referenceValue > value)
		diff = referenceValue - value;
	else
		diff = value - referenceValue;


	//printf("referenceValue %f, value %f, diff %f,  threshold %f\n", referenceValue, value, diff, threshold);

	if (referenceValue < 0)
		referenceValue = referenceValue * (-1);
	if (value < 0)
		value = value * (-1);

	if (diff == 0 || ((diff / (referenceValue + value)) <= threshold)) {
		return true;
	}

	//printf("\nRelated Calculation:\nAverage: %f\nActualValue: %f\nDiff: %f\ndeviation: %f\nthreshold: %f\n", referenceValue, value, diff, diff / referenceValue, threshold);

	return false;
}
*/

bool valueIsRelatedToReferenceValueOrBetweenMinAndMax(float referenceValue, float minimumValue, float maximumValue, float value, float threshold) {
	
	if (value >= minimumValue && value <= maximumValue) {
		return true;
	}

	return valueIsRelatedToReferenceValue(referenceValue, value, threshold);
}
