# python script to correctly make trackDB tracks, ordered

import os
import glob


def main():
    """Make trackDB file
    """

    track_file = "trackDb.txt"

    # Rcolorbrewer Spectral
    colors = ["213,62,79",
              "244,109,67",
              "253,174,97",
              "254,224,139",
              "255,255,191",
              "230,245,152",
              "171,221,164",
              "102,194,165",
              "50,136,189"]
    # ggplot colors
    colors = ["248,118,109",
              "205,150,0",
              "124,174,0",
              "0,190,103",
              "0,191,196",
              "0,169,255",
              "199,124,255",
              "255,97,204",
              "248,118,109"]
    color_idx = 0
    
    with open(track_file, 'w') as fp:

        # ATAC
        atac_files = sorted(glob.glob("*ATAC-seq*"))
        color = colors[color_idx]
        color_idx += 1
        for atac_file in atac_files:
            print atac_file
            atac_fields = atac_file.split(".")
            track_name = atac_file.split(".bigwig")[0]
            url = atac_file
            shortlabel = "{}_{}".format(atac_fields[3], atac_fields[0].split("-")[1])
            longlabel = track_name
            filetype = "bigWig"
            visibility = "full"

            
            fp.write(
                ("track\t{}\n"
                 "bigDataUrl\t{}\n"
                 "shortLabel\t{}\n"
                 "longLabel\t{}\n"
                 "type\t{}\n"
                 "visibility\t{}\n"
                 "color\t{}\n\n").format(
                     track_name,
                     url,
                     shortlabel,
                     longlabel,
                     filetype,
                     visibility,
                     color))
            
        # ChIP-seq
        chip_greps = ["H3K27ac", "H3K4me1", "H3K27me3", "CTCF"]

        for chip_grep in chip_greps:
        
            chip_files = sorted(glob.glob("*{}*".format(chip_grep)))
            color = colors[color_idx]
            color_idx += 1
            for chip_file in chip_files:
                print chip_file
                chip_fields = chip_file.split(".")
                track_name = chip_file.split("_x")[0]
                url = chip_file
                shortlabel = "{}_{}".format(chip_fields[3], chip_fields[0].split("-")[1])
                longlabel = track_name
                filetype = "bigWig"
                visibility = "full"
                
                fp.write(
                    ("track\t{}\n"
                     "bigDataUrl\t{}\n"
                     "shortLabel\t{}\n"
                     "longLabel\t{}\n"
                     "type\t{}\n"
                     "visibility\t{}\n"
                     "color\t{}\n\n").format(
                         track_name,
                         url,
                         shortlabel,
                         longlabel,
                         filetype,
                         visibility,
                         color))
            
        # RNA
        rna_greps = ["RAMPAGE*pos",
                     "RAMPAGE*neg",
                     "ribozero*pos",
                     "ribozero*neg",
                     "polyA*pos",
                     "polyA*neg",
                     "PAS-seq*pos",
                     "PAS-seq*neg"]

        for rna_grep in rna_greps:
        
            rna_files = sorted(glob.glob("*{}*".format(rna_grep)))
            if "pos" in rna_grep:
                color = colors[color_idx]
                color_idx += 1

            # composite track
            rna_grep_clean = rna_grep.replace("*", "_")
            fp.write((
                "track\tcomposite_{0}\n"
                "type\tbigWig\n"
                "compositeTrack\ton\n"
                "shortLabel\t{0}\n"
                "longLabel\t{0}\n"
                "visibility\tfull\n\n").format(rna_grep_clean))

            # rna tracks
            for rna_file in rna_files:
                print rna_file
                rna_fields = rna_file.split(".")
                track_name = rna_file.split(".bw")[0]
                url = rna_file
                shortlabel = "{}_{}_{}".format(rna_fields[3], rna_fields[0].split("-")[1], rna_fields[8])
                longlabel = track_name
                filetype = "bigWig"
                visibility = "full"
                
                fp.write(
                    ("track\t{}\n"
                     "bigDataUrl\t{}\n"
                     "shortLabel\t{}\n"
                     "longLabel\t{}\n"
                     "parent composite_{}\ton\n"
                     "type\t{}\n"
                     "visibility\t{}\n"
                     "color\t{}\n\n").format(
                         track_name,
                         url,
                         shortlabel,
                         longlabel,
                         rna_grep_clean,
                         filetype,
                         visibility,
                         color))
    
    return

main()
