/*
  Kamer.cpp
  Copyright (c) 2014 Kenneth van Ewijk.  All right reserved.
*/

// include this library's description file
#include "Kamer.h"

Kamer::Kamer(void)
{
  // initialize this instance's variables
  volume = 0;
  temp = 0;
  wallSurface = 0;
  windowSurface = 0;
  surfaceArea = 0;
  heatFlow = 0;
  deltaTemp = 0;
}


//Set Room Properties
void Kamer::setVolume(int givenVolume)
{
  volume = givenVolume;
}

void Kamer::setTemp(double givenTemp)
{
  temp = givenTemp;
}

void Kamer::setSurfaceArea(int givenWall, int givenWindow)
{
  wallSurface = givenWall;
  windowSurface = givenWindow;
  surfaceArea = wallSurface + windowSurface;
}


//Calc Room Properties
void Kamer::calcTemp(int outsideTemp)
{
  calcHeatFlow(outsideTemp);

  deltaTemp = heatFlow / ( (volume * 1.43) * 920);
  double newTemp = temp - deltaTemp;

  temp = newTemp;
}

void Kamer::calcHeatFlow(int outsideTemp)
{
  double deltaTemp2 = temp - outsideTemp;

  //Make sure deltaTemp is positive
  double heatFlowWall = 0.6 * wallSurface * (deltaTemp2 / 20);
  double heatFlowIsolation = 0.08 * wallSurface * (deltaTemp2 / 0.5);

  double heatFlowWallTotal = 1 / ( (1 / heatFlowWall) + (1 / heatFlowIsolation) );

  double heatFlowWindow = 0.98 * windowSurface * (deltaTemp2 / 12);
  double heatFlowAir = 0.025 * windowSurface * (deltaTemp2 / 12);

  double heatFlowWindowTotal = 1 / ( (1 / heatFlowWindow) + (1 / heatFlowAir) );

  heatFlow = heatFlowWindowTotal + heatFlowWallTotal;
  heatFlow = heatFlow * 60;
}


//Get Room Properties
int Kamer::getVolume(void)
{
	return volume;
}

double Kamer::getTemp(void)
{
	return temp;
}

int Kamer::getSurfaceArea(void)
{
	return surfaceArea;
}

double Kamer::getHeatFlow(void)
{
  return heatFlow;
}

double Kamer::getDeltaTemp(void)
{
  return deltaTemp;
}