#!/usr/bin/env python3
# Eryn Wells <eryn@erynwells.me>

'''
Convert a Hugo content page from a single page to a bundle and vice versa.
'''

import argparse
import os.path

def parse_args(argv, *a, **kw):
    parser = argparse.ArgumentParser(*a, **kw)
    parser.add_argument('page_path', metavar='PATH', help='Path to page or bundle to convert')
    args = parser.parse_args(argv)
    return args

def path_is_page(path):
    if not os.path.isfile(path):
        return False

    _, extension = os.path.splitext(path)
    if extension not in ['.md']:
        return False

    return True

def path_is_page_bundle(path):
    if not os.path.isdir(path):
        return False

    contents = os.listdir(path)
    if 'index.md' not in contents:
        return False

    return True

def can_convert_page_bundle_to_page(path):
    contents = os.listdir(path)
    if len(contents) != 1:
        return False

    if 'index.md' not in contents:
        return False

    return True

def convert_page_to_bundle(path) -> bool:
    dirname = os.path.dirname(path)
    name, extension = os.path.splitext(path)

    bundle_path = os.path.join(dirname, name)
    index_path = os.path.join(dirname, 'index' + extension)

    try:
        print(f'Creating {bundle_path} ... ', end='')
        os.mkdir(bundle_path)
        print('OK')
    except FileExistsError as e:
        print(f'\nCannot create {bundle_path}: directory already exists')
        return False

    try:
        print(f'Moving {path} -> {index_path} ... ', end='')
        os.rename(path, index_path)
        print('OK')
    except:
        print(f'\nCannot move page file to new index path {index_path}')

    return True

def main(argv):
    args = parse_args(argv[1:], prog=argv[0])

    page_path = args.page_path
    if path_is_page(page_path):
        print(f'{page_path} is a page')
        convert_page_to_bundle(page_path)
    elif path_is_page_bundle(page_path):
        print(f'{page_path} is a page bundle')
        if not can_convert_page_bundle_to_page(page_path):
            print(f'Cannot convert bundle {page_path} to page')

if __name__ == '__main__':
    import sys
    result = main(sys.argv)
    sys.exit(0 if not result else result)
