#!/usr/bin/python3
"""
A Bullshit Bingo card generator for German election reporting.

This is a CGI; just make it executable and put it into your server's
CGI directory.  If your server doesn't support CGIs, see a future
post on http://blog.tfiu.de.

Distributed under CC-0
"""

import random

BINGO_PHRASES = """
Schnittmengen
Das ist jetzt nicht der Moment
leider nicht so
schnoungslos
Erdbeben
Erdrutsch
Schockstarre
historisches Ergebnis
hat X jetzt schon verändert
schwierige Ausgangslage
kein einfacher/schöner Tag/Abend
bitterer Tag/Abend
(kein) einfaches Pflaster
glücklicher Tag/Abend
der Abend ist noch lang
schmerzhaftes Ergebnis
Wahlabend/heutigen Abend abwarten
genau/eingehend analysieren
klarer/klares ... Auftrag/Mandat
Verantwortung
Regierungsverantwortung
Regierungsbildung
Regierungsauftrag
großartige Wahlkämpfer
nach vorne
besser werden
zunächst ... bedanken
zunächst ... gratuliere ich
mich freut zunächst
nicht weiter so
Leidenschaft
bitteres Ergebnis
gemessen an den Umfragen
Rückenwind
gemeinsam
langer Weg
klare Haltung
blaues Auge
alle Demokrat(inn)en
bis zum Schluss gekämpft
Schlussspurt
konnten ... nicht überzeugen
für die Volksparteien insgesamt
zur Kenntnis nehmen
maßlos enttäuscht
für Koalition zur Verfügung stehen
ein Signal an
wäre dieses Ergebnis nicht möglich gewesen
großer Dank
toller Einsatz
Geschlossen(heit)
beschönigen
Endergebnis abwarten
klare Abgrenzung
Handschrift
in der Sache
im Ton
vor Kraft kaum laufen
klassische Volksparteien
anerkennen
anders werden
toller/großartiger Erfolg
Ergebnis verdient
Oppositionsrolle
annehmen
Personaldiskussion
deutlich verloren
lässt nur einen Schluss zu
mit allen Gespräche führen
Gesprächsbereit
beste(s) Ergebnis
andere Politik brauchen
Koalitionspartner brauchen
harte Arbeit/hart arbeiten
Glückwunsch
Ende des Tages
Sensation
starke Mitwerber(innen)
richtige Themen gesetzt
Chance genutzt
Oppositionsarbeit
starkes Ergebnis
ein Stück weit
gestärkt
nicht zufrieden
müssen uns jetzt fragen
wir haben Themen
was lernen wir ... daraus
man muss die Dinge kritisch betrachten
deutlich ... zugelegt
den Menschen zuhören
große Aufgaben
gemeinsam mit ihnen/den Bürgern
Sieg, der auf das Konto... geht
jetzt freuen wir uns erstmal über den Sieg
großer Sieg
Zeichen, das ... ausgeht
Gewinner des heutigen Abends
Vertrauen der Bevölkerung/Wähler
haben anders entschieden
Persönlichkeitswahl
Persönlichkeitswert(e)
stabil und verlässlich
Verlässlichkeit
der Ball liegt bei/im Feld
wir stehen (dafür) bereit
Das sind wir schuldig
schwieriger Wahlkampf
engagierter Wahlkampf
Bestätigung
nach oben gearbeitet
die Menschen kennen mich
klare Botschaft
wir sind gut beraten
gut für ... Land
Menschen im Land
in unserem Land
mit allen demokratischen Parteien
als Aufgabe geben
das ist gelungen
demütig/Demut
heute nicht nachdenken
die kleinen Parteien
die Zahlen zeigen
Kopf-an-Kopf
kann eine Option sein
Gesamtsituation
über Koalitionen reden
mehr versprochen
Zukunftsthemen
persönliche Konsequenzen
Endspurt
stärkste Kraft
guten Mutes
klarer Trend
gewünscht hätten
Dank an die Wähler(innen)
zweistellig
andere Themen
starke Polarisierung
gleichauf
Augenhöhe
Gelassenheit
Zeit lassen
Vertrauensvorschuss
sehr genau
gestalten
mehr erhofft
alle demokratischen Parteien
morgen/in den nächsten Tagen
Hochrechnung abwarten
""".strip()


items = [s.strip() for s in BINGO_PHRASES.split("\n")]

cont = ["""<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style type="text/css">
table {
	border-collapse: collapse;
}
td {
	margin-top: 1cm;
	border: 1pt solid grey;
	padding: 4mm;
}
.separator {
border-top:1pt dashed black;
margin: 3cm 0 2cm 0;
}
.scissors {
	position:relative;
	margin:0;
	padding:0;
	font-size: 20pt;
	top:-12pt;
}
</style>
</head>
<body>"""]

def make_table():
	res = ["<table>"]
	s = random.sample(items, 25)
	for row in [s[:5], s[5:10], s[10:15], s[15:20], s[20:25]]:
		res.append("<tr>{}</tr>".format("".join(
			"<td>{}</td>".format(item) for item in row)))
	res.append("</table>")
	return ("\n".join(res)+"\n")

cont.append(make_table())
cont.append(
	'<div class="separator"><p class="scissors">✂</p></div>')
	
cont.append(make_table())

cont.append("</body></html>")

print("Content-type: text/html; charset=utf-8\n")
print("\n".join(cont))
