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

from __future__ import unicode_literals
from ascii_graph import Pyasciigraph
import sys
import codecs
from optparse import OptionParser
import re

def input_analyzer(line, data):
    split = split_once_rightmost(line)
    data.append((split[0], float(split[1])))

def split_once_rightmost(s):
     seq = s.split(':')
     if len(seq) > 1:
         return [":".join(seq[0:-1]), seq[-1]]
     return seq

if __name__ == '__main__':
    usage = "usage: %prog [-l <label>] [-f file] [-s inc|dec] [-w <number of char>] [-m <min len of char>]\n\n"\
            "examples:\n"\
            "   printf 'label1:10\\nlabel2:100\\n' | %prog -l 'my graph'\n"\
            "   printf 'l1:10\\nl2:100\\n' > ./mf; %prog -l 'my graph' -f ./mf\n"\
            "   %prog -l 'my graph' -f mf -s inc\n"\
            "   %prog -l 'my graph' -f mf -s dec -w 60 -m 10\n"

    parser = OptionParser(usage=usage)
    parser.add_option("-f", "--file", dest="filename", 
            help="import data from FILE (one data per line,            "\
                "format: <label>:<value>)", 
            metavar="FILE")
    parser.add_option("-s", "--sort", dest="sort", 
            help="sort type: inc (increasing) or dec (decreasing)", 
            metavar="SORT")
    parser.add_option("-l", "--label", dest="label", 
            help="label of the graph", 
            metavar="LAB")
    parser.add_option("-w", "--width", dest="width", 
            help="width of the graph", 
            metavar="WIDTH")
    parser.add_option("-m", "--min_graph", dest="mingraph", 
            help="minimum length of the graph bar", 
            metavar="LEN")



    (options, args) = parser.parse_args()

    data=[]

    if options.filename:
        try:
            f = open(options.filename, 'r')
        except IOError:
            print('cannot open file: %(file)s' % { 'file': options.filename})
            exit(1)

        if sys.version < '3':
            char_stream = codecs.getreader("utf-8")(f)
        else:
            char_stream = f

        for line in char_stream:
            input_analyzer(line, data)

    if not sys.stdin.isatty():
        if sys.version < '3':
            char_stream = codecs.getreader("utf-8")(sys.stdin)
        else:
            char_stream = sys.stdin
        for line in char_stream:
            input_analyzer(line, data)

    label = options.label or ''
    width = options.width or 79
    width = int(width)
    mingraph = options.mingraph or width/2
    mingraph = int(mingraph)
    sort = options.sort or 0
    if sort == 'dec':
        sort = 2
    if sort == 'inc':
        sort = 1

    graph = Pyasciigraph(line_length=width, min_graph_length=mingraph)

    counter = 0 
    for line in graph.graph(label, data, sort):
        #skip the first two lines if no label
        if not options.label and counter < 2:
            counter = counter + 1
        else:
            if sys.version < '3':
                print(line.encode('utf-8'))
            else:
                print(line)

