#pragma once

#include <vector>
#include "TTT_data.h"
#include "Field.h"
#include "SPData.h"
#include "SHData.h"

class Phases
{
public:
	Phases();
	~Phases();

	void findActiveNodes(SPData spd, std::string filename);

	void calculatePhases(std::string filename);
	void findNewActiveNodes(std::string filename);
	void checkActiveNodes(std::string filename);
	void calculateAustenite(std::string filename);
	void updateStartTime(std::string filename);
	void calculateMartensite(std::string filename);
	void calculate(std::string filename);

	void readMaxTempInNode(SHData shd, std::string filename);
	void findMaxTempInNode(std::string filename);

	void setCurrentTemperature(Field);
	void setTTTData(TTT_data);
	void setSPData(SPData);
	void setSHData(SHData);
	void setTime(double);
	void setTimeStep(double);
	void writeSPData(std::string filename);
	void writeSHData(std::string filename);

	void writePhases(std::string filename);
	void writeAustenite(std::string filename);
	void writeMartensite(std::string filename);
	void writeBainite(std::string filename);
	void writeMaxTemperature(std::string filename);

	std::vector<double> active_nodes;
	std::vector<double> active_nodes_temperature;
	std::vector<double> node_start_time;
	std::vector<double> node_real_time;
	std::vector<double> F;
	std::vector<double> f_A;
	std::vector<double> f_M;
	std::vector<double> delta_f_A;
	std::vector<double> node_activity_ph;
	std::vector<double> node_max_temp;
	std::vector<int> node_vector;
	std::vector<int> node_vector_sh;

	double currentTime;
	double currentTimeStep;
	double n;
	double k;
	double deltaF;
	double t_s;
	double t_e;
	int number_of_nodes;
	
	TTT_data ttt;
	Field current_temperature;
	SPData spdata;
	SHData shdata;

};