package gZFS;

import java.util.Arrays;
import java.util.Collections;
import java.util.Hashtable;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.util.Log;
import org.jfree.util.Rotation;

public class guiTrt {



	private float zfsSize = 0;
	private float zfsUsedByData = 0;
	private float zfsUsedBySnapshots = 0;
	private float zfsFree=0;
	private float zfsFreePourcent=0;
	private String Unit = "";

	public void formatChartValue(String totalSize, String usedByData, String usedBySnapshots){

		setUnit("");
		setZfsSize(0);
		setZfsUsedByData(0);
		setZfsUsedBySnapshots(0);
		setZfsFree(0);
		setZfsFreePourcent(0);


		if ( !totalSize.equalsIgnoreCase("") && ! totalSize.equalsIgnoreCase(null) && !usedByData.equalsIgnoreCase("") && !usedByData.equalsIgnoreCase(null) && !usedBySnapshots.equalsIgnoreCase("") && !usedBySnapshots.equalsIgnoreCase(null)){

			if ( totalSize.contains("T")){
				setUnit("T");
				setZfsSize(Float.valueOf(totalSize.substring(0, (totalSize.length()-1))));
				setZfsFree(getZfsSize());

				//Set Pourcent Data Size with the good Unit
				if (usedByData.contains("T")){
					setZfsFree(getZfsFree() - Float.valueOf(usedByData.substring(0, (usedByData.length()-1))));
					setZfsUsedByData((Float.valueOf(usedByData.substring(0, (usedByData.length()-1))) *100)/getZfsSize());
				}else{
					if (usedByData.contains("G")){
						setZfsFree(getZfsFree() - Float.valueOf(usedByData.substring(0, (usedByData.length()-1)))/1024);
						setZfsUsedByData(( (Float.valueOf(usedByData.substring(0, (usedByData.length()-1)))/1024) *100)/getZfsSize());
					}else{
						if (usedByData.contains("M")){
							setZfsFree(getZfsFree() - Float.valueOf(usedByData.substring(0, (usedByData.length()-1)))/1048576);
							setZfsUsedByData(( (Float.valueOf(usedByData.substring(0, (usedByData.length()-1)))/1048576) *100)/getZfsSize());
						}
					}
				}

				//Set Pourcent Snapshot Size with the good Unit
				if (usedBySnapshots.contains("T")){
					setZfsUsedBySnapshots((Float.valueOf(usedBySnapshots.substring(0, (usedBySnapshots.length()-1))) *100)/getZfsSize());
				}else{
					if (usedBySnapshots.contains("G")){
						setZfsUsedBySnapshots(( (Float.valueOf(usedBySnapshots.substring(0, (usedBySnapshots.length()-1)))/1024) *100)/getZfsSize());
					}else{
						if (usedBySnapshots.contains("M")){
							setZfsUsedBySnapshots(( (Float.valueOf(usedBySnapshots.substring(0, (usedBySnapshots.length()-1)))/1048576) *100)/getZfsSize());
						}
					}
				}

			}

			if ( totalSize.contains("G")){
				setUnit("G");
				setZfsSize(Float.valueOf(totalSize.substring(0, (totalSize.length()-1))));
				setZfsFree(getZfsSize());
				//Set Pourcent Data Size with the good Unit
				if (usedByData.contains("G")){
					setZfsFree(getZfsFree() - Float.valueOf(usedByData.substring(0, (usedByData.length()-1))));
					setZfsUsedByData(( Float.valueOf(usedByData.substring(0, (usedByData.length()-1))) *100)/getZfsSize());
				}else{
					if (usedByData.contains("M")){
						setZfsFree(getZfsFree() - Float.valueOf(usedByData.substring(0, (usedByData.length()-1)))/1024);
						setZfsUsedByData(( (Float.valueOf(usedByData.substring(0, (usedByData.length()-1)))/1024) *100)/getZfsSize());
					}
				}
				//Set Pourcent Snapshot Size with the good Unit
				if (usedBySnapshots.contains("G")){
					setZfsFree(getZfsFree() - Float.valueOf(usedBySnapshots.substring(0, (usedBySnapshots.length()-1))));
					setZfsUsedBySnapshots(( Float.valueOf(usedBySnapshots.substring(0, (usedBySnapshots.length()-1))) *100)/getZfsSize());
				}else{
					if (usedBySnapshots.contains("M")){
						setZfsFree(getZfsFree() - Float.valueOf(usedBySnapshots.substring(0, (usedBySnapshots.length()-1)))/1024);
						setZfsUsedBySnapshots(( (Float.valueOf(usedBySnapshots.substring(0, (usedBySnapshots.length()-1)))/1024) *100)/getZfsSize());
					}
				}

			}
			setZfsFreePourcent(100-getZfsUsedByData()-getZfsUsedBySnapshots());
			System.out.println("zfsUsedByData :"+getZfsUsedByData()+" "+"zfsUsedBySnapshots : "+getZfsUsedBySnapshots()+" zfsFree : "+getZfsFree());

		}
	}
	
	public float formatChartDataInPourcent(String val2convert, String totalSize){
		if ( !val2convert.equalsIgnoreCase("") && val2convert.equalsIgnoreCase(null)&& totalSize.equalsIgnoreCase("")&&totalSize.equalsIgnoreCase(null)){
			return (Float.valueOf(val2convert.substring(0, (val2convert.length()-1))) *100)/Float.valueOf(totalSize);	
		}
		return 0;
	}

	public float dataInPourcent(float val2convert, float totalSize){
		return  (val2convert*100)/(totalSize);
	}
	
	public float calculFree(float usedSize, float totalSize){
		return totalSize - usedSize;
	}
	
	

	public PieDataset createDataset(Hashtable<String, Float> dataCharset2) {  
		final DefaultPieDataset result = new DefaultPieDataset();  
		String[] keystitle = (String[]) dataCharset2.keySet().toArray(new String[0]);

		Arrays.sort(keystitle, Collections.reverseOrder());
		for(String keytitle : keystitle) {

			result.setValue(keytitle, dataCharset2.get(keytitle));  
		}
		return result;  
	}  

	public org.jfree.chart.JFreeChart createChart(final PieDataset dataset, final String title) {  
		final JFreeChart chart = ChartFactory.createPieChart3D(title, dataset, true, true, false);  

		final PiePlot3D plot = (PiePlot3D) chart.getPlot(); 

		plot.setStartAngle(290);  
		plot.setDirection(Rotation.CLOCKWISE);  
		plot.setLabelGenerator(null);
		//plot.setForegroundAlpha(0.8f);  

		return chart;  
	}

	/**
	 * @return the zfsSize
	 */
	public float getZfsSize() {
		return zfsSize;
	}

	/**
	 * @param zfsSize the zfsSize to set
	 */
	public void setZfsSize(float zfsSize) {
		this.zfsSize = zfsSize;
	}

	/**
	 * @return the zfsUsedByData
	 */
	public float getZfsUsedByData() {
		return zfsUsedByData;
	}

	/**
	 * @param zfsUsedByData the zfsUsedByData to set
	 */
	public void setZfsUsedByData(float zfsUsedByData) {
		this.zfsUsedByData = zfsUsedByData;
	}

	/**
	 * @return the zfsUsedBySnapshots
	 */
	public float getZfsUsedBySnapshots() {
		return zfsUsedBySnapshots;
	}

	/**
	 * @param zfsUsedBySnapshots the zfsUsedBySnapshots to set
	 */
	public void setZfsUsedBySnapshots(float zfsUsedBySnapshots) {
		this.zfsUsedBySnapshots = zfsUsedBySnapshots;
	}

	/**
	 * @return the zfsFree
	 */
	public float getZfsFree() {
		return zfsFree;
	}

	/**
	 * @param zfsFree the zfsFree to set
	 */
	public void setZfsFree(float zfsFree) {
		this.zfsFree = zfsFree;
	}

	/**
	 * @return the zfsFreePourcent
	 */
	public float getZfsFreePourcent() {
		return zfsFreePourcent;
	}

	/**
	 * @param zfsFreePourcent the zfsFreePourcent to set
	 */
	public void setZfsFreePourcent(float zfsFreePourcent) {
		this.zfsFreePourcent = zfsFreePourcent;
	}

	/**
	 * @return the unit
	 */
	public String getUnit() {
		return Unit;
	}

	/**
	 * @param unit the unit to set
	 */
	public void setUnit(String unit) {
		Unit = unit;
	}  


}
