import argparse
import sys
import re
import frontmatter
import yaml
from pathlib import Path

BLOG_POST_RE = re.compile(r"^\d{4}-\d+-\d+-(.*)\.md$")


def main() -> int:
    # Handle program arguments
    ap = argparse.ArgumentParser(
        description="Fixes the `aliases` field in the front matter of markdown files"
    )
    ap.add_argument(
        "--root",
        type=Path,
        default=Path(__file__).parent.parent / "content" / "blog",
        help="The root directory to search for markdown files",
    )
    args = ap.parse_args()

    # Find all markdown files
    md_files = list(args.root.glob("**/*.md"))
    print(f"Found {len(md_files)} markdown files")

    # Handle each file
    for file in md_files:
        print(f"Processing: {file}")

        # Determine what the alias path should be
        title_matches = BLOG_POST_RE.match(file.name)
        if not title_matches:
            print("Skipping file, not a blog post")
            continue

        title = title_matches.group(1)
        correct_alias = f"/blog/{title.lower()}"
        print("Correct alias:", correct_alias)

        # Load and parse the frontmatter
        post = frontmatter.load(file)

        # Get the list of aliases
        aliases = post.metadata.get("aliases", [])

        # If the alias is already correct, skip it
        if correct_alias in aliases:
            print("Found correct alias")
            continue

        # Otherwise, add the correct alias
        aliases.append(correct_alias)

        # Write out the new frontmatter
        post.metadata["aliases"] = aliases
        file_contents = frontmatter.dumps(post, sort_keys=False)
        file_contents += "\n"
        file.write_text(file_contents)

    return 0


if __name__ == "__main__":
    sys.exit(main())