#!/usr/bin/env python3

from pathlib import Path
import sys

source = Path(sys.argv[1])
source_videos = source / "videos"

out_tags = {}
out_videos = {}

for video in source_videos.iterdir():
    if video.is_dir():
        slug = video.name

        if slug not in out_videos:
            out_videos[slug] = {
                "tags": [],
            }

        tagfile = video / "tags"
        if not tagfile.is_dir():
            with tagfile.open() as tags:
                for tag in tags.readlines():
                    tag = tag.strip()
                    out_videos[slug]["tags"].append(tag)
                    if tag not in out_tags:
                        out_tags[tag] = {
                            "videos": [],
                            "count_videos": None,
                        }
                    out_tags[tag]["videos"].append(slug)

for tag in out_tags:
    out_tags[tag]["count_videos"] = len(out_tags[tag]["videos"])

print(out_tags)

from jinja2 import Environment, FileSystemLoader, select_autoescape
env = Environment(
    loader=FileSystemLoader('./templates'),
    autoescape=select_autoescape(['html'])
)

from datetime import datetime
import random

# Output
# Create output dir
out_dir = Path("./out")
out_dir.mkdir(parents=True, exist_ok=True)

# Create main page
templ = env.get_template('index.html')
templ.stream(featured_tags=random.sample(list(out_tags), 6), out_tags=out_tags, out_videos=out_videos).dump(str((out_dir / "index.html").resolve()))

# Create about pages
out_dir_about = out_dir / "about"
out_dir_about.mkdir(parents=True, exist_ok=True)

# Create about page
templ = env.get_template('about.html')
templ.stream(last_update=datetime.now().strftime("%Y-%m-%d %H:%M:%S")).dump(str((out_dir_about / "index.html").resolve()))


# Create tag pages
out_dir_tag = out_dir / "tag"
out_dir_tag.mkdir(parents=True, exist_ok=True)

# Create tag page
templ = env.get_template('tags.html')
templ.stream(sorted_tags=sorted(out_tags), out_tags=out_tags, out_videos=out_videos).dump(str((out_dir_tag / "index.html").resolve()))

templ = env.get_template('tag.html')
for tag, tag_obj in out_tags.items():
    out_dir_tag_this = out_dir_tag / tag
    out_dir_tag_this.mkdir(parents=True, exist_ok=True)
    templ.stream(tag=tag, slugs=tag_obj["videos"], out_tags=out_tags, out_videos=out_videos).dump(str((out_dir_tag_this / "index.html").resolve()))