# These scripts are use to download data from the igniton project into any file type. 


def download_file(filename, data , converter):
	"""
	This script will download data from ignition perspective to the users computer.

	Args:
    	filename: The name of the file to be downloaded .
    	data: The data to be downloaded. May be a string, a byte[], or an InputStream. Strings will be written in UTF-8 encoding.
    	converter: This is a function that is used to convert the ignition data into the required format for the file. 
    			   If not conversion is required then pass a function that just returns original data. 

	Returns:
    	None.

	Raises:
    	ValueError: Raises an Value erorr if no data or converter is provided.
	"""
	if not data:
		raise ValueError("No data provided. Data is required to perform download ")
		
	if not converter:
		raise ValueError("Please provide a data converter to transform the data")
	
	_data = converter(data)
	system.perspective.download(filename, _data)

def device_data_converter(data):
	"""
	This script converts a list of dicts to a dataset, it uses the first dict to set the column headers in the dataset.

	Args:
    	
    	data: List of dictionaries. 
    	
	Returns:
    	Ignition Data Set

	Raises:
    	None
	"""
	dataset = []
	for index,row in enumerate(data):
		if index == 0:
			header = row.keys()
		row = []
		for i in header:
			value = data[index][i]
			row.append(value)
		dataset.append(row)
	
	convert_data = system.dataset.toDataSet(header, dataset)
	return system.dataset.toCSV(convert_data)
	
def detailed_views_converter(data):
	"""
		This script converts a list of dicts to a dataset, it uses the first dict to set the column headers in the dataset.
	
		Args:
	    	
	    	data: List of dictionaries. 
	    	
		Returns:
	    	Ignition Data Set
	
		Raises:
	    	None
	"""
	dataset = []
	for index,row in enumerate(data):
		if index == 0:
			header = row.keys()
		row = []
		for i in header:
			if i  == "Devices":
				value = array_to_string(data[index][i])
			else:
				value = data[index][i]
			row.append(value)
		dataset.append(row)
	
	convert_data = system.dataset.toDataSet(header, dataset)
	return system.dataset.toCSV(convert_data)
	
def array_to_string(array , deliminator="#"):
	converted = ""
	if len(array) == 1:
		return array[0]
	for i , value in enumerate(array):
		converted += value
		if not i == len(array)-1:
			converted += deliminator
		
		
	return converted	