#!/usr/bin/env python
# -*- coding: utf-8 -*-

from toolbox import openAnything
import datetime
CHANNELS="svt1"# svt2 svt24 tv3 tv4 tv4+ tv4sport kanal5 tv6 tv8 kanal9 barnkanalen kunskapskanalen"
CHANNELS="svt1 svt2 svt24 tv3 tv4 tv4+ tv4sport kanal5 tv6 tv8 kanal9 kunskapskanalen"
CHANNELS="svt1 svt2 tv3 tv4 kanal5 tv6 kunskapskanalen tv8 kanal9 tv4sport tv4+ svt24"
# barnkanalen

def getProgram(channels):
	program = {}
	for channel in channels:
		program[channel] = getChannel(channel)
	return program

def getChannel(channel):
	url = "http://www.tv.nu/kanal/" + channel
	source = openAnything(url)
	shows = {}
	for line in source:
		if "h2" in line:
			start, title = parseProgramLine(line)
			if start: 
				shows[start] = title
	return shows

def parseProgramLine(line):
	#<div id="0445" class="program py"><h2>04:45 <strong>Jimmy Kimmel live</strong></h2>
	start = ""
	for part in line.split():
		if "id=" in part:
			start = part.split('"')[1]
			break
	if len(start) != 4: # id is empty some times, UR
		return None, None

	strongStart = line.find('<strong>')
	strongStart = line.find('>', strongStart) + 1
	strongEnd = line.find('</strong', strongStart)
	title = line[strongStart:strongEnd]
	return start, title

def generateNowPage(program):
	now = datetime.datetime.now().strftime("%H%M")
	print "<html><head><title>" + now + "</title>"
	print "<link rel='stylesheet' type='text/css' href='list.css' />"
	print "<link rel='source' href='http://wendt.se/tv/generator2.py' />"
	print "<meta http-equiv='refresh' content='60' />"
	print "</head><body>"
	print "<div id='wrapper'>"
	for channel in CHANNELS.split():
		print "<div class='channel' id='" + channel.replace('+', 'plus') + "'>"

		start, title = getNow(program[channel], now)
		if not start:
			print "</div>"
			continue
		print "<span class='now-show " + start + "'>"
		print "<span class='show-start'>" + prettyFormat(start) + "</span>"
		print "<span class='show-title'>" + title + "</span>"
		print "</span>"

		start, title = getNext(program[channel], start);
		if not start:
			print "</div>"
			continue
		print "<span class='next-show " + start + "'>"
		print "<span class='show-start'>" + prettyFormat(start) + "</span>"
		print "<span class='show-title'>" + title + "</span>"
		print "</span>"

		print "</div>"
	print "</div>"
	print "<div id='clock'>KLOCKA</div>"
	print "<script src='clock.js' /></script>"
	print "</body></html>"

def getNow(shows, now):
	start = None
	title = None
	# keys in a dict aren't sorted, sort() sorts in place
	sorted = list(shows.keys())
	sorted.sort()
	for key in sorted:
		if key == now:
			return key, shows[key]
		elif key > now:
			break
		else:
			start, title = key, shows[key]
	return start, title

def getNext(shows, start):
	found = False
	# keys in a dict aren't sorted, sort() sorts in place
	sorted = list(shows.keys())
	sorted.sort()
	for key in sorted:
		if not found:
			if key == start:
				found = True
		else:
			return key, shows[key]
	return None, None
		

def prettyFormat(start):
	if not start:
		return ""
	return start[0:2] + ":" + start[2:4]

if __name__ == "__main__":
	program = getProgram(CHANNELS.split())
	generateNowPage(program)
