__author__ = 'Chris'

"""
Preps the extracted Python code so that it can be evaled by the
monkey_parser
"""

from itertools import *

source = '''
import sys
import os
import doctest
import cProfile
import pstats
from argparse import ArgumentParser
from argparse import RawDescriptionHelpFormatter
from gooey import Gooey
parser = ArgumentParser(description='Example Argparse Program', formatter_class=RawDescriptionHelpFormatter)
parser.add_argument('filename', help='filename')
parser.add_argument('-r', '--recursive', dest='recurse', action='store_true', help='recurse into subfolders [default: %(default)s]')
parser.add_argument('-v', '--verbose', dest='verbose', action='count', help='set verbosity level [default: %(default)s]')
parser.add_argument('-i', '--include', action='append', help='only include paths matching this regex pattern. Note: exclude is given preference over include. [default: %(default)s]', metavar='RE')
parser.add_argument('-m', '--mycoolargument', help='mycoolargument')
parser.add_argument('-e', '--exclude', dest='exclude', help='exclude paths matching this regex pattern. [default: %(default)s]', metavar='RE')
parser.add_argument('-V', '--version', action='version')
parser.add_argument('-T', '--tester', choices=['yes', 'no'])
parser.add_argument(dest='paths', help='paths to folder(s) with source file(s) [default: %(default)s]', metavar='path', nargs='+')
'''

def take_imports(code):
  return takewhile(lambda line: 'import' in line, code)

def drop_imports(code):
  return dropwhile(lambda line: 'import' in line, code)

def split_line(line):
  # splits an assignment statement into varname and command strings
  # in: "parser = ArgumentParser(description='Example Argparse Program')"
  # out: "parser", "ArgumentParser(description='Example Argparse Program"
  variable, instruction = line.split('=', 1)
  return variable.strip(), instruction.strip()

def update_parser_varname(new_varname, code):
  # lines = source.split('\n')[1:]
  lines = filter(lambda x: x != '', code)

  argparse_code = dropwhile(lambda line: 'import' in line, lines)
  old_argparser_varname, _ = split_line(argparse_code.next())

  updated_code = [line.replace(old_argparser_varname, new_varname)
                  for line in lines]
  return updated_code

if __name__ == '__main__':
  pass