﻿#include "SteelPhases.h"
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <sstream>
#include "TTT_data.h"
#include "phases.h"
#include "field.h"


void calculateSteelPhases(std::string output_field, std::string work_dir, SPData spdata, std::vector<double> time_step_vector)
{
	//std::string output_field = "Phase_Field";
	TTT_data ttt(work_dir + "/calculation/phase_properties.yaml");
	Phases ph;
	ph.setTTTData(ttt);

	ph.setSPData(spdata);

	ph.findActiveNodes(spdata, work_dir + "/calculation/calculation-log-file.log");
	
	std::string line;

	for (int i = 0; i < time_step_vector.size(); i++)
	{

		Field temperature_current(work_dir + "/getdpresults/" + "Temperature" + "_" + spdata.getDomainName() + "_" + std::to_string(i) + ".dat");
		ph.setTime(time_step_vector[i]);
		if (i == 0)
		{
			ph.setTimeStep(time_step_vector[i] - time_step_vector[i]);	
			
		}
		else 
		{
			ph.setTimeStep(time_step_vector[i] - time_step_vector[i-1]);
			
		}

		ph.setCurrentTemperature(temperature_current);

		ph.calculatePhases(work_dir + "/calculation/calculation-log-file.log");

		

 		ph.writePhases(work_dir + "/getdpresults/" + output_field + "_" + spdata.getDomainName() + "_" + std::to_string(i) + ".dat");

		ph.writeMartensite(work_dir + "/getdpresults/" + "MartensiteField" + "_" + spdata.getDomainName() +  "_" + std::to_string(i) + ".dat");

		ph.writeAustenite(work_dir + "/getdpresults/" + "AusteniteField" + "_" + spdata.getDomainName() + "_" +  std::to_string(i) + ".dat");

		ph.writeBainite(work_dir + "/getdpresults/" + "BainiteField" + "_" + spdata.getDomainName() + "_" + std::to_string(i) + ".dat");

	}
	ph.writeSPData(work_dir + "/getdpresults/spdata_" + spdata.getDomainName() + ".spd");


}

void calculateSteelHardness(std::string output_field, std::string work_dir, SHData shdata, std::vector<double> time_step_vector)
{
	Phases ph;
	ph.setSHData(shdata);
	ph.readMaxTempInNode(shdata, work_dir + "/calculation/hardness-log-file.log");
	std::string line;

	for (int i = 0; i < time_step_vector.size(); i++)
	{
		Field temperature_current(work_dir + "/getdpresults/" + "Temperature" + "_" + shdata.getDomainName() + "_" + std::to_string(i) + ".dat");
		ph.setTime(time_step_vector[i]);
		if (i == 0)
		{
			ph.setTimeStep(time_step_vector[i] - time_step_vector[i]);

		}
		else
		{
			ph.setTimeStep(time_step_vector[i] - time_step_vector[i - 1]);

		}

		ph.setCurrentTemperature(temperature_current);

		ph.findMaxTempInNode( work_dir + "/calculation/hardness-log-file.log");

		ph.writeMaxTemperature(work_dir + "/getdpresults/" + "MaxTemperatureField" + "_" + shdata.getDomainName() + "_" + std::to_string(i) + ".dat");
	}

	ph.writeSHData(work_dir + "/getdpresults/shdata_" + shdata.getDomainName() + ".spd");
}