package materials;

/**
 * Atomic class.
 * 
 * @author Daniel Weschke
 * @see <a href="http://en.wikipedia.org/wiki/Chemical_element">http://en.wikipedia.org/wiki/Chemical_element</a>
 */
public class Element {
	
	/**
	 * Atomic number serves independently as unique identifier.
	 */
	int number;
	
	/**
	 * Atomic name serves independently as unique identifier.
	 */
	String name;
	
	/**
	 * Atomic symbol serves independently as unique identifier.
	 */
	String symbol;
	
	/**
	 * Group refers to the element's position in the periodic table.
	 */
	int group;
	
	/**
	 * Period refers to the element's position in the periodic table.
	 * @author Daniel Weschke
	 */
	enum Period{P1, P2, P3, P4, P5, P6, P7};
	Period period;
	
	/**
	 * Block refers to the element's position in the periodic table.
	 * @author Daniel Weschke
	 */
	enum Block{s, p, d, f};
	Block block;
	
	/**
	 * State of matter, here gas, liquid or gas, applies at standard temperature and pressure condition (STP).
	 * @author Daniel Weschke
	 */
	enum State{Gas, Liquid, Solid};
	State state;
	
	/**
	 * Occurrence distinguishes naturally occurring elements, categorized as either primordial or transient (from decay), and additional synthetic elements that have been produced technologically, but are not known to occur naturally.
	 * @author Daniel Weschke
	 */
	enum Occurrence{Primorial, Transient, Synthetic};
	Occurrence occurence;
	
	/**
	 * Description summarizes the element's properties using the broad categories commonly presented in periodic tables: Actinide, alkali metal, alkaline earth metal, halogen, lanthanide, metal, metalloid, noble gas, non-metal, and transition metal.
	 * @author Daniel Weschke
	 */
	enum Description{Actinide, AlkaliMetal, AlkalineEarthMetal, Halogen, Lanthanide, Metal, Metalloid, NobleGas, NonMetal, TransitionMetal}
	Description description;
	
	final public Element H = new Element(1, "Hydrogen", "H", 1, Period.P1, Block.s, State.Gas, Occurrence.Primorial, Description.NonMetal);
	
	Element(int number, String name, String symbol, int group, Period period, Block block, State state, Occurrence occurrence, Description description){
		this.number = number;
		this.name = name;
		this.symbol = symbol;
		this.group = group;
		this.period = period;
		this.block = block;
		this.state = state;
		this.occurence = occurrence;
		this.description = description;
	}
	
	public static void main(String[] args) {
		
	}

}
