#Creador de sitios desde archivos de texto
#Por HI7903b

import os
import subprocess
from datetime import datetime
import unicodedata
import re


anio = datetime.now().year

print ("Conversor de archivos de texto a HTML")
print ("mini generador de sitios web")
print ("Poné un archivo con nombre 'inicio' para la pagina principal")

temas = {
    "1": "bosque_lectura.css",
    "2": "cuaderno_indie.css",
    "3": "noches_de_synte.css",
    "4": "taller_matutino.css",
    "5": "terminal_papel.css",
    "6": "vinilo_medianoche.css"
}

eleccion = input("""Elegí un tema para el sitio:
    "1": "bosque_lectura.css",
    "2": "cuaderno_indie.css",
    "3": "noches_de_synte.css",
    "4": "taller_matutino.css",
    "5": "terminal_papel.css",
    "6": "vinilo_medianoche.css"
Si ponés otra cosa, en el HTML va salir "NONE"
""")

css = temas.get(eleccion)

print (f"El tema seleccionado es el {css}")

#Función que le pone guiones y junta el texto si hay espacios
def limpiar_slug(texto):
    # Normaliza (separa acentos)
    texto = unicodedata.normalize('NFD', texto)
    # Elimina acentos
    texto = texto.encode('ascii', 'ignore').decode('utf-8')
    # Reemplaza espacios por guiones
    texto = texto.lower().replace(" ", "-")
    # Elimina cualquier cosa rara
    texto = re.sub(r'[^a-z0-9\-]', '', texto)
    # Evita guiones duplicados
    texto = re.sub(r'-+', '-', texto)
    return texto

#Nombre para el sitio, y el subtítulo para la página principal
#titulo_sitio = input ("Nombre del sitio: ")
titulo_sitio = "Narrativa"
#subtitulo_sitio = input ("Algún subtitulo: ")
subtitulo_sitio = "Espacio para la memoria no lineal"
#contacto = input ("Correo de contacto: ")
contacto = "hi7903b@envs.net"

el_directorio = os.getcwd()
#archivos_de_texto = el_directorio+"/textos"
archivos_de_texto = input ("ruta completa a los archivos de texto: ")
que_archivo = "txt" #esto se puede cambiar por el archivo que se desee, pero en Gopher yo pongo solo txt
lista_ordenada = []

#Primero busco si hay algun archivo que no tenga fecha 
for ruta, directorio, archivos in os.walk (archivos_de_texto):
    for archivo in archivos:
        
        #Si el archivo no tiene fecha de creación
        if archivo.endswith (".txt") and not archivo.startswith ("inicio") and not archivo.startswith ("20"):
            
            encontrado = os.path.join (ruta, archivo)
            fecha_mod = os.path.getmtime(encontrado)
            fechita = datetime.fromtimestamp(fecha_mod).strftime("%Y-%m-%d")

            #Nuevo nombre con fecha
            nuevo_nombre = fechita + "-"+archivo
            antiguo = os.path.join(ruta, archivo)
            nuevo = os.path.join(ruta, nuevo_nombre)
            os.rename(antiguo, nuevo)
            print(f"Renombrado: {antiguo} → {nuevo}")

nombre_corto = ""
lista_archivos_index = []

for ruta, directorio, archivos in os.walk (archivos_de_texto):
    for archivo in archivos:
        
        #Busco los archivos de texto que no se llamen inicio (ese va a ser el index)
        if archivo.endswith (".txt") and not archivo.startswith ("inicio"):
            ruta_archivo = os.path.join(ruta, archivo)
            with open(ruta_archivo, "r") as archivo1:
                texto_archivo = archivo1.read()
                texto_archivo = texto_archivo.replace("\n", "<br>\n")
                ruta_archivo_nuevo = os.path.join(el_directorio, archivo)
                with open(ruta_archivo_nuevo[:-4]+".html", "w") as archivo2:
                 
                    nombre_corto = limpiar_slug(archivo[11:])
                    lista_archivos_index.append(archivo[:-4]+".html")
                    #print (f"El nombre del archivo creado es: {nombre_corto}")
                    archivo2.write(f"""<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{titulo_sitio}</title>
    <link rel="stylesheet" href=" css/{css}">
    
</head>
<body>
<h1>{titulo_sitio}</h1>

<br><br>

{texto_archivo}

<br><br>

<nav>
<a href='index.html'>Volver al inicio</a>
</nav>


<footer>
Copyleft {anio} por {titulo_sitio} <br>
<a href="mailto:{contacto}">Contacto</a> <br>
    Esta página fue generada a partir de un archivo de texto con Python.
    <br>
    <a href="generador.py">Descargar el generador</a>
</footer>


</body>
</html>
""")



                #print(f"✅ ¡Archivo: {archivo} para publicación creado!")
                #print("📄 Ruta del nuevo archivo: " + ruta_archivo_nuevo)
                
#Esto hay que hacerlo de esta manera porque si no no carga todos los documentos en la lista                
for ruta, directorio, archivos in os.walk (archivos_de_texto):
    for archivo in archivos:


        #Para crear el index HTML (lo que está entre comillas se puede cambiar por lo más conveniente):
        if not archivo.endswith (".txt") and archivo.startswith ("inicio"):
            ruta_archivo = os.path.join(ruta, archivo)
            
            #Armo los enlaces con los archivos
            lista_archivos_index.sort(reverse=True)
            menu = ""
            for pagina in lista_archivos_index:
                fecha = pagina[:10]
                titulo = pagina[11:-5]
                titulo = titulo.replace("-", " ").title()
                titulo_visible = f"{fecha} - {titulo}"
                menu += f'<li><a href="{pagina}">{titulo_visible}</a></li>'

            #escribo el index    
            with open(ruta_archivo, "r") as archivo1:
                texto_archivo = archivo1.read()
                texto_archivo = texto_archivo.replace("\n", "<br>\n")
                ruta_archivo_nuevo = os.path.join(el_directorio, "index.html")
                print("Cantidad de artículos:", len(lista_archivos_index))
                with open(ruta_archivo_nuevo, "w") as archivo3:
                    archivo3.write(f"""<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{titulo_sitio}</title>
    <link rel="stylesheet" href=" css/{css}">
    
</head>
<body>
<h1>{titulo_sitio}</h1>

<br>

<h3><i>{subtitulo_sitio}</i></h3>
<hr>
<br><br>
{texto_archivo}
<br><br>

<nav>
<ul>
{menu}
</ul>
</nav>


<footer>
Copyleft {anio} por {titulo_sitio} <br>
<a href="mailto:{contacto}">Contacto</a> <br>
    Esta página fue generada a partir de un archivo de texto con Python.
    <br>
    <a href="generador4-texto-a-html.py">Descargar el generador</a>
</footer>


</body>
</html>
""")




print ("Todo creado. ¡A disfrutar!")
