#!python

from __future__ import division
import numpy as np
import pandas as pd
import ast
import inspect
import re

# Need this to enable logo rendering without a graphical backend
import matplotlib as mpl
mpl.use('Agg')

import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties, FontManager
from matplotlib.transforms import Bbox
from matplotlib.colors import to_rgba
import pdb

import logomaker
import logomaker.validate
from logomaker.validate import validate_parameter, validate_mat

from logomaker.data import load_alignment
from logomaker.Logo import Logo
from logomaker.make_logo import make_logo
from logomaker.character import get_fontnames_dict, get_fontnames
from logomaker.make_styled_logo import make_styled_logo

import argparse
from logomaker.validate import params_with_values_in_dict
from logomaker.documentation_parser import parse_documentation_file

# logomaker only works at the commandline
assert __name__ == '__main__'

parser = argparse.ArgumentParser(description='Create logo from FASTA file.')

doc_file = 'make_logo_arguments.txt'
doc_dict = parse_documentation_file(doc_file)

# Register all variable names and default values with argparse
names, x, xx, default_values = inspect.getargspec(make_logo)
for name, default in zip(names, default_values):

    # Create dict to hold keyword arguments
    tmp_dict = {}
    tmp_dict['default'] = default
    tmp_dict['type'] = str
    if name == 'enrichment_logbase':
        tmp_dict['choices'] = {'2', '10', 'e'}
    elif name in params_with_values_in_dict:
        tmp_dict['choices'] = params_with_values_in_dict[name]

    # Get documentation for that function
    if name in doc_dict:

        # Get entry
        entry = doc_dict[name]
        entry.set_default(default)

        # Set documentation string
        tmp_dict['help'] = entry.get_argparse_doc()
    else:
        tmp_dict['help'] = 'NOT DOCUMENTED.'

    parser.add_argument('--%s' % name, **tmp_dict)

# Create parsers for *all*
args = parser.parse_args()
kwargs = vars(args)
logo = make_logo(**kwargs)
print 'Logo created!'
