#!/usr/bin/python3

import os
import re
from pathlib import Path

def process_md_file(md_path):
    try:
        with open(md_path, 'r', encoding='utf-8') as f:
            content = f.read()
    except UnicodeDecodeError:
        print(f"Skipping {md_path} - unable to decode as UTF-8")
        return

    # Remove existing hide-toc frontmatter
    hide_toc_pattern = re.compile(
        r'^---\s*\n\s*hide:\s*\n\s*-\s+toc\s*\n---\s*\n*',
        flags=re.MULTILINE
    )
    content = hide_toc_pattern.sub('', content, count=1)

    # Remove leading empty lines
    content = re.sub(r'^\n+', '', content)

    # Process H1 heading
    h1_pattern = re.compile(r'^\s*#\s+(.*)$', re.MULTILINE)
    match = h1_pattern.search(content)

    if match:
        title = match.group(1).strip()
        frontmatter = f'---\ntitle: "{title}"\n---\n'
        
        # Construct new content with frontmatter at beginning
        before_h1 = content[:match.start()].lstrip('\n')
        after_h1 = content[match.end():].lstrip('\n')
        new_content = frontmatter + before_h1 + after_h1
    else:
        print(f"No H1 heading found in {md_path}, creating basic frontmatter")
        frontmatter = '---\ntitle: ""\n---\n\n'
        new_content = frontmatter + content.lstrip('\n')

    # Ensure no empty lines after frontmatter
    lines = new_content.split('\n')
    if len(lines) >= 3 and lines[0] == '---' and lines[2] == '---':
        remaining = lines[3:]
        while remaining and not remaining[0].strip():
            remaining.pop(0)
        new_content = '\n'.join(lines[:3] + remaining)

    # Create and write MDX file
    mdx_path = md_path.with_suffix('.mdx')
    with open(mdx_path, 'w', encoding='utf-8') as f:
        f.write(new_content)
    
    # Remove original MD file
    md_path.unlink()
    print(f"Converted {md_path} to {mdx_path}")

def main():
    for root, dirs, files in os.walk('.'):
        dirs[:] = [d for d in dirs if not d.startswith('.')]
        for file in files:
            if file.endswith('.md'):
                md_path = Path(root) / file
                process_md_file(md_path)

if __name__ == '__main__':
    main()