import collections
import string
from datetime import datetime
import string

import ampoule_ssg as ampoule
from ampoule_ssg import markdown
from ampoule_ssg import extra_jinja

site = ampoule.Site("../blog-build")
extra_jinja.init_filters(site)
extra_jinja.init_tests(site)


@site.filter("markdown")
def markdown_filter(text):
    return markdown.markdown2html(text)


def article_url(url):
    url = url.lower().rpartition(".")[0] if "." in url else url.lower()

    new_url = ""
    for i in url:
        if i in string.ascii_lowercase:
            new_url += i
        elif i in string.whitespace:
            new_url += "-"

    return new_url + ".html"


# Set context
site.context["timestamp"] = datetime.now()
site.context["ampoule"] = ampoule

# Add articles
articles = ampoule.Index("articles", url_transform=article_url, sort_by=lambda x: x.date, reverse=True, exclude=r"^DRAFT_")
site.add_from_index(articles, "/articles", "article.html")

# Add projects
projects = ampoule.Index("projects", url_transform=article_url, sort_by=lambda x: x.file_name)
site.add_from_index(projects, "/projects", "project.html")

# Create the index pages
main_page = ampoule.Page(site, "home.html", articles=articles)
projects_page = ampoule.Page(site, "projects.html", projects=projects)
topics = collections.defaultdict(list)
for article in articles:
    for topic in article["topics"]:
        topics[topic].append(("articles", article))
for project in projects:
    for topic in project["topics"]:
        topics[topic].append(("projects", project))
topics = sorted(topics.items(), key=lambda x: x[0])
index_page = ampoule.Page(site, "index.html", topics=topics)

for topic, posts in topics:
    site.add_page(f"/index/{topic}.html", ampoule.Page(site, "index-tag.html", topic=topic, posts=posts))

# Add the pages to the site
site.add_page("/", main_page)
site.add_page("/projects/", projects_page)
site.add_page("/index/", index_page)
site.add_page("/about/", ampoule.Page(site, "about.html"))

# Add static files
site.add_from_index(
        ampoule.Index("static", recursive=True, exclude=r"\.md$", static=True),
        "/static"
)

site.build(dont_delete=[".git"])
