/*
 * Material.h
 *
 *  Created on: May 8, 2017
 *      Author: vadims
 */

#ifndef MATERIAL_H
#define MATERIAL_H

#include <iostream>
#include <string>
#include <map>
#include "InputValue.hpp"

typedef nlohmann::json json;

class Material
{
private:
	int id;
	std::string name;
	std::map<std::string, InputValue> materialData;

public:
	Material(std::string, json);
	Material();
	~Material();
	Material(const Material& that);
	Material& operator=(Material that);

	std::string getName();
	int getId();
	std::string getMaterialValue(std::string);
	std::string getMaterialValueWithEnds(std::string);

	std::map<std::string, InputValue> getMaterialData();
	bool getMaterialDataFlag(std::string flagName);
	std::string getMaterialValueByName(std::string);
	std::string getMaterialDerivativeWithEnds(std::string);


	void addData(std::string, InputValue);

	bool isNL();

	std::pair<double, double> getSkinLayerThicknessRange(double freq_min, double freq_max);
	//double getSkinLayerThickness(double frequency, double temperature);

	std::vector<std::pair<float, float>> effectiveBH(std::string data);

};

#endif



