import fwr
import delimited

"""
Preplot importing functions.
"""


def is_fixed_width (file):
	fixed_width_types = [ "sps1", "sps21", "p190", "fixed-width" ]
	return type(file) == dict and "type" in file and file["type"] in fixed_width_types

def is_delimited (file):
	delimited_types = [ "csv", "p111", "x-sl+csv" ]
	return type(file) == dict and "type" in file and file["type"] in delimited_types

def from_file (file, realpath = None):
	"""
	Return a list of dicts, where each dict has the structure:
		{
			"line_name": <int>,
			"points": [
				{
					"line_name": <int>,
					"point_number": <int>,
					"easting": <float>,
					"northing": <float>
				},
				…
			]
		}
	On error, return a string describing the error condition.
	"""

	filepath = realpath or file["path"]
	if is_fixed_width(file):
		records = fwr.from_file(filepath, file)
	elif is_delimited(file):
		records = delimited.from_file(filepath, file)
	else:
		return "Unrecognised file format"

	if type(records) == str:
		# This is an error message
		return records

	if file.get("type") == "x-sl+csv":
		return records

	lines = []
	line_names = set([r["line_name"] for r in records])
	for line_name in line_names:
		line = dict(line_name=line_name)
		line_points = [r for r in records if r["line_name"] == line_name]
		if line_points:
			line["points"] = line_points
			lines.append(line)

	return lines
