import os
import sys

import lxml.etree as ET

class Directory(object):
	
	def __init__(self, path):
		self.path = path
		self.dirname = os.path.basename(path)
		
	def __repr__(self):
		return '{:s} - DIRECTORY'.format(self.dirname)
		
	def make_row(self):
		row = ET.Element('tr')
		name_element = ET.SubElement(row, 'td')
		name_element.text = self.dirname
		size_element = ET.SubElement(row, 'td')
		size_element.text = '--'
		return row


class File(object):
	
	def __init__(self, path):
		self.path = path
		self.filename = os.path.basename(path)
		self.filesize = os.path.getsize(path)
		
	def __repr__(self):
		return '{:s} - {:d}'.format(self.path, self.filesize)

	def make_row(self):
		row = ET.Element('tr')
		name_element = ET.SubElement(row, 'td')
		name_element.text = self.filename
		size_element = ET.SubElement(row, 'td')
		size_element.text = '{:d}'.format(self.filesize)
		return row


def main():
	
	if len(sys.argv) < 2:
		print 'ERROR: not enough arguments specified'
		return 1
	
	contents = []
	
	base_path = sys.argv[1]
	for item in os.listdir(base_path):
		full_path = os.path.join(base_path, item)
		
		if os.path.isfile(full_path):
			contents.append(File(full_path))
		elif os.path.isdir(full_path):
			contents.append(Directory(full_path))
	
	root = ET.Element('html')
	body_tag = ET.SubElement(root, 'body')
	table_tag = ET.SubElement(root, 'table')
	
	row = ET.Element('tr')
	head1 = ET.SubElement(row, 'th')
	head1.text = 'Name'
	head2 = ET.SubElement(row, 'th')
	head2.text = 'Size'
	table_tag.append(row)

	for item in contents:
		# poly freakin morphism
		table_tag.append(item.make_row())
	
	ET.dump(root)
		
if __name__ == '__main__':
	sys.exit(main())
