#!/usr/bin/env ruby
# encoding: UTF-8
# coding: UTF-8

require 'fileutils'

Encoding.default_internal = Encoding::UTF_8

# Da la fecha como se quiere
def fecha_formato
    f = Time.now.to_s.split(' ')[0].split('-')

    def dia d
        return d.to_i.to_s
    end

    def mes m
        m = m.to_i

        if    m == 1
            'enero'
        elsif m == 2
            'febrero'
        elsif m == 3
            'marzo'
        elsif m == 4
            'abril'
        elsif m == 5
            'mayo'
        elsif m == 6 
            'junio'
        elsif m == 7
            'julio'
        elsif m == 8
            'agosto'
        elsif m == 9
            'septiembre'
        elsif m == 10
            'octubre'
        elsif m == 11
            'noviembre'
        else  m == 12
            'diciembre'
        end
    end

    return dia(f[2]) + ' de ' + mes(f[1]) + ' del ' + f[0]
end

# Variables
epub_nombre = 'edicion_digital_como_metodologia_para_una_edicion_global'
coletilla = '_3-0-0.epub'
epub_nombre_predeterminado = ''
fecha = fecha_formato
legal_nombre = '002-legal.xhtml'
css_nombre = 'styles.css'
nav_nombre = 'nav.xhtml'
html_nombre = 'index.html'
css_contenido = []
legal_contenido = []
legal_contenido_recortado = []
css_contenido = []
nav_contenido = []
html_template = []

# Va a la legal
puts "Poniendo fecha a la legal…\n\n"
Dir.chdir(File.dirname(__FILE__) + '/ebooks/recursos/archivos-madre/xhtml')

# Coloca la fecha a la legal
legal = File.open(legal_nombre, 'r:UTF-8')
legal.each do |linea|
    if linea =~ /id="fecha"/
        linea = linea.gsub(/^(.*?>).*?(<.*)$/, '\1' + fecha + '\2')
    end
    legal_contenido.push(linea)
end
legal.close
legal = File.new(legal_nombre, 'w:UTF-8')
legal.puts legal_contenido
legal.close

# Va a la hoja de estilos
Dir.chdir('../css')

# Incluye la hoja de estilos actualizada
FileUtils.rm('styles.css')
system("pc-add --add css")

# Coloca los elementos adicionales a la hoja de estilos
css = File.open(css_nombre, 'r:UTF-8')
css.each do |linea|
    if linea =~ /Estilos de esta edición/

        # Obtiene los elementos adicionales de la hoja de estilos
        css_extra = File.open('styles-extra.css', 'r:UTF-8')
        css_extra.each do |l|
            css_contenido.push(l)
        end
        css_extra.close

        break
    end
    css_contenido.push(linea)
end
css.close
css = File.new(css_nombre, 'w:UTF-8')
css.puts css_contenido
css.close

# Va al proyecto automata
Dir.chdir('../../epub-automata')

# Crea los EPUB y el MOBI
system("pc-automata -f ../archivos-madre/md/todo.md -n ../archivos-madre/md/notas.md -c ../archivos-madre/img/portada.jpg -i ../archivos-madre/img/ -s ../archivos-madre/css/styles.css -x ../archivos-madre/xhtml/ --section --reset --with-indexes --two-columns --compress --no-alphabet --overwrite")

# Cambia los nombres y mueve los archivos, excepto del EPUB 3.0.0
Dir.glob('*.*').each do |e|
    if (File.extname(e) == '.epub' || File.extname(e) == '.mobi') && e !~ /#{coletilla}/
        File.rename(e, epub_nombre + File.extname(e))
        FileUtils.mv(epub_nombre + File.extname(e), '../..')

        # Obtiene el nombre por defecto del epub
        if File.extname(e) == '.epub' then epub_nombre_predeterminado = File.basename(e,'.*') end
    end
end

# Cambia el nombre y mueve el EPUB 3.0.0
File.rename(epub_nombre_predeterminado + coletilla, epub_nombre + coletilla)
FileUtils.mv(epub_nombre + coletilla, '../..')

# Se va al directorio donde están los libros
Dir.chdir('../..')

# Se firman los libros
Dir.glob('*.*').each do |e|
    if File.extname(e) == '.epub' || File.extname(e) == '.mobi'
        system("gpg --output #{e}.sig --detach-sig #{e}")
    end
end

# Empieza la creación del sitio
puts "\nRecreando el sitio…"

# Reduce el contenido a lo que se pondrá en el sitio
freno = true
legal_contenido.each do |linea|
    # Evita agarrar todo después de </section>
    if linea =~ /^\s+<\/section/ then freno = true end

    if !freno && linea !~ /Los textos que componen/ then legal_contenido_recortado.push('    ' + linea.gsub("\n",'').gsub('../img/logo','ebooks/recursos/archivos-madre/img/logo')) end

    # Permita agarrar a partir de la fecha
    if linea =~ /id="fecha"/ then freno = false end
end

# Regresa a la raíz
Dir.chdir('..')

# Recrea el archivo CSS para el sitio, adoptando los estilos del libro más otros adicionales
css = File.open('ebooks/recursos/archivos-madre/css/' + css_nombre, 'r:UTF-8')
css.each do |linea|
    css_contenido.push(linea)
end
css.close
css = File.open('site-src/templates/' + css_nombre, 'r:UTF-8')
css.each do |linea|
    css_contenido.push(linea)
end
css.close
css = File.new('site-src/css/' + css_nombre, 'w:UTF-8')
css.puts css_contenido
css.close

# Obtiene solo lo necesario del nav
freno = true
nav = File.open('ebooks/recursos/epub-automata/epub/OPS/' + nav_nombre, 'r:UTF-8')
nav.each do |linea|
    # Evita agarrar todo después de </nav>
    if linea =~ /^\s+<\/nav/ then freno = true end

    # Solo toma partes y capítulos
    if !freno && linea !~ /^\s{28,}/ && linea !~ /^\s{24,}<\/li>/ && linea !~ /000-portada/ && linea !~ /9999-notes/ then nav_contenido.push('    ' + linea.gsub("\n",'').gsub(/<\s*?a.*?>(.*?)<.*?a.*?>/, '<p>\1</p></li>')) end

    # Permita agarrar a partir del nav
    if linea =~ /^\s+<nav/ then freno = false end
end
nav.close

# Obtiene la plantilla HTML
html = File.open('site-src/templates/' + html_nombre, 'r:UTF-8')
html.each do |linea|
    # Cambia los elementos del nav, legal y fecha
    html_template.push(linea.gsub(/\s+<!--nav-->/, nav_contenido.join("\n")).gsub(/\s+<!--legal-->/, legal_contenido_recortado.join("\n")).gsub('<!--fecha-->', fecha))
end
html.close

# Crea el sitio
html = File.new(html_nombre, 'w:UTF-8')
html.puts html_template
html.close