#!/usr/bin/env python
# -*- coding: utf-8 -*-

""" License

    Copyright (C) 2013 YunoHost

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as published
    by the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public License
    along with this program; if not, see http://www.gnu.org/licenses

"""

"""
    Generate function header documentation
"""
import os
import sys
import yaml
import re

def main():
    """

    """
    with open('action_map.yml') as f:
        action_map = yaml.load(f)

    resources = {}

    del action_map['general_arguments']
    for category, category_params in action_map.items():
        if 'category_help' not in category_params: category_params['category_help'] = ''

        with open('yunohost_'+ category +'.py', 'r') as f:
            lines = f.readlines()
        with open('yunohost_'+ category +'.py', 'w') as f:
            in_block = False
            for line in lines:
                if in_block:
                    if re.search(r'^"""', line):
                        in_block = False
                        f.write('\n')
                        f.write('    '+ category_params['category_help'] +'\n')
                        f.write('"""\n')
                else:
                    f.write(line)

                if re.search(r'^""" yunohost_'+ category, line):
                    in_block = True

        for action, action_params in category_params['actions'].items():
            if 'action_help' not in action_params:
                action_params['action_help'] = ''

            help_lines = [
                '    """',
                '    '+ action_params['action_help'],
                ''
            ]

            if 'arguments' in action_params:
                help_lines.append('    Keyword argument:')
                for arg_name, arg_params in action_params['arguments'].items():
                    if 'help' in arg_params:
                        help = ' -- '+ arg_params['help']
                    else:
                        help = ''
                    name = arg_name.replace('-', '_')
                    if name[0] == '_':
                        required = False
                        if 'full' in arg_params:
                            name = arg_params['full'][2:]
                        else:
                            name = name[2:]
                        name = name.replace('-', '_')

                    help_lines.append('        '+ name + help)

            help_lines.append('')
            help_lines.append('    """')

            with open('yunohost_'+ category +'.py', 'r') as f:
                lines = f.readlines()
            with open('yunohost_'+ category +'.py', 'w') as f:
                in_block = False
                first_quotes = True
                for line in lines:
                    if in_block:
                        if re.search(r'^    """', line):
                            if first_quotes:
                                first_quotes = False
                            else:
                                in_block = False
                                for help_line in help_lines:
                                    f.write(help_line +'\n')
                    else:
                        f.write(line)

                    if re.search(r'^def '+ category +'_'+ action +'\(', line):
                        in_block = True


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