#!/usr/local/bin/python

import cgi
import cgitb; cgitb.enable(display=0, logdir="/tmp")
import os
import os.path
import re


def cabecera(titulo):
    print "Content-Type: text/html"
    print
    print
    print "<html>"
    print "<head>"
    print "<title>",titulo,"</title>"
    print "</head>"
    print "<body>"


def pie():
    print "</body>"
    print "</html>"


def cuerpo(titulo,texto):


    texto = parseaEnlaces(texto)


    print "<h2>",titulo,"</h2>"
    print "<hr />"
    print "<a href=\"wiki.py\">Inicio</a>"
    print "<hr />"




    if(texto != ""):
        print texto
        print "<br>"
        print "<form action=\"wiki.py\" method=\"get\">"
        print "<input type=\"submit\" value=\"Editar\"> </input>"
        print "<input type=\"hidden\" name=\"editar\" value=\""+titulo+"\"> </input>"
        print "</form>"
        
        
    else:
        print "<p>La pagina no existe, para crearla introduzca"
        print "el texto en el area de abajo y dele a \"guardar\"</p>"
        print "<br>"
        print "<form action=\"wiki.py\" method=\"get\" >"
        print "<textarea cols=\"55\" rows=\"10\" name=\"texto\"></textarea>"
        print "<input type=\"hidden\" name=\"guardar\" value=\""+titulo+"\"></input>"        
        print "<br>"
        print "<input type=\"submit\" value=\"Guardar\">"
        print "</form>"


def editarCuerpo(titulo,texto):
    print "<h2>",titulo,"</h2>"
    print "<hr />"
    print "<form action=\"wiki.py\" method=\"get\" >"
    print "<textarea cols=\"55\" rows=\"10\" name=\"texto\">"+texto+"</textarea>"
    print "<input type=\"hidden\" name=\"guardar\" value=\""+titulo+"\"></input>"
    print "<br>"
    print "<input type=\"submit\" value=\"Guardar\"></input>"
    print "</form>"



def pagina(titulo, texto):
    cabecera(titulo)
    cuerpo(titulo, texto)
    pie()



def cargaPagina(titulo):

    fd = open(titulo+".txt","r")
    contenido = fd.readlines()
    fd.close()

    texto = ""
    for linea in contenido:
        texto = texto + linea



    return texto

def guardaPagina(titulo, texto):
    fd = open(titulo+".txt","w")
    fd.write(texto)
    fd.close()



def editarPagina(titulo,texto):
    cabecera(titulo)
    editarCuerpo(titulo, texto)
    pie()


def parseaEnlaces(texto):

    patron = re.compile("([A-Z][a-z]+[A-Z][a-z]+)+[A-Z]*[a-z]*") # Nombre de página
    lista = patron.findall(texto)


    conjunto = set(lista)

    resultado = texto

    for titulo in conjunto:
        if(os.path.exists(titulo+".txt")):
            resultado = resultado.replace(titulo,"<a href=\"wiki.py?pagina="+titulo+"\">"+titulo+"</a>")
        else:
            resultado = resultado.replace(titulo,titulo+"<a href=\"wiki.py?pagina="+titulo+"\">?</a>")
    return resultado





########################################################



variables = cgi.FieldStorage()







if( variables.has_key("texto") and variables.has_key("pagina")):

    titulo = variables["pagina"].value
    texto = variables["texto"].value
    
    pagina(titulo, texto)
    
elif (variables.has_key("pagina")):

    titulo = variables["pagina"].value
    
    if(os.path.exists(titulo+".txt")):

        texto = cargaPagina(titulo)

        pagina(titulo,texto)
            
    else:
        pagina(titulo,"")

elif (variables.has_key("editar")):

    titulo = variables["editar"].value

    texto = cargaPagina(titulo)
    editarPagina(titulo, texto)

elif (variables.has_key("guardar") and variables.has_key("texto")):
    titulo = variables["guardar"].value
    texto = variables["texto"].value

    guardaPagina(titulo,texto)
    
    texto = "<h1> SE HA GUARDADO CON EXITO</h1>" + texto
    pagina(titulo,texto)
    
else:

    contenido = "<p>Bienvenido a nuestro WikiWiki de prueba</p>\n"
    titulo = "WikiWiki"
    
    if(os.path.exists(titulo+".txt")):
        contenido = contenido + cargaPagina("WikiWiki")
       
    pagina(titulo,contenido)

