#
#  makesitetrack.py
#  ENRAGE
#

import sys
import string
import optparse
from commoncode import getConfigParser, getConfigOption, getConfigBoolOption

print "makesitetrack: version 2.2"


def main(argv=None):
    if not argv:
        argv = sys.argv

    usage = "usage: python %prog sitefile outbedfile [--noheader] [--stype fieldID] [--color xx,yy,zz] [--append] [--exploded]"

    parser = makeParser(usage)
    (options, args) = parser.parse_args(argv[1:])

    if len(args) < 2:
        print usage
        sys.exit(1)

    infile = args[0]
    outfileName = args[1]
    
    makesitetrack(infile, outfileName, options.stypeID, options.color, options.append, options.compact, options.noHeader)


def makeParser(usage=""):
    parser = optparse.OptionParser(usage=usage)
    parser.add_option("--noheader", action="store_true", dest="noHeader")
    parser.add_option("--stype", type="int", dest="stypeID")
    parser.add_option("--color", dest="color")
    parser.add_option("--append", action="store_true", dest="append")
    parser.add_option("--exploded", action="store_false", dest="compact")

    configParser = getConfigParser()
    section = "makesitetrack"
    stypeID = getConfigOption(configParser, section, "stypeID", None)
    color = getConfigOption(configParser, section, "color", "0,0,0")
    append = getConfigBoolOption(configParser, section, "append", False)
    compact = getConfigBoolOption(configParser, section, "compact", True)
    noHeader = getConfigBoolOption(configParser, section, "noHeader", False)

    parser.set_defaults(stypeID=stypeID, color=color, append=append, compact=compact, noHeader=noHeader)

    return parser


def makesitetrack(infileName, outFileName, stypeID=None, color="0,0,0", append=False, compact=True, noHeader=False):
    if stypeID is not None:
        doStype = True
    else:
        doStype = False
        stypeID = 4

    infile = open(infileName)

    if append:
        outfile = open(outFileName, "a")
    else:
        outfile = open(outFileName, "w")

    try:
        (name, extension) = outFileName.split(".")
    except ValueError:
        name = outFileName.split(".")[:-1]
        name = string.join(name, "_")
    
    if not noHeader:
        outfile.write('track name="%s" visibility=4 itemRgb="On"\n' % name)

    count = 1
    for line in infile:
        if line[0] == "#":
            continue

        fields = line.split()
        if compact:
            (chrom, loc) = fields[0].split(":")
            (start, stop) = loc.split("-")
            score = fields[1]
        else:
            chrom = fields[1]
            start = fields[2]
            stop = fields[3]
            score = 1.

        stype = "%s-%s" % (name, str(count))
        if doStype:
            try:
                stype = fields[stypeID]
                if stype == "11":
                    stype = "can"
                elif stype == "0":
                    stype = "half"
                else:
                    stype = "NC" + stype
            except IndexError:
                pass

        sense = fields[-2].strip()
        if sense not in ["+", "-"]:
            sense = "+"

        outfile.write("%s\t%s\t%d\t%s\t%s\t%s\t-\t-\t%s\n" % (chrom, start, int(stop) + 1, stype, score, sense, color))
        count += 1

    outfile.close()


if __name__ == "__main__":
    main(sys.argv)