#!/hive/groups/encode/dcc/bin/python
import sys, os, re, argparse, subprocess, math
from ucscgenomics import ra, track

def main():
    parser = argparse.ArgumentParser(
        prog='qaUpdateMetadata',
        description='Update a the beta metaDb with selected items from the corresponding alpha metaDb object',
        epilog='example: qaUpdateMetadata hg19 wgEncodeUwDnaseSeq md5sum objType cell treatment'
        )
    parser.add_argument('-t', '--trackPath', help='Overrides the default track path ~/kent/src/hg/makeDb/trackDb/')
    parser.add_argument('database', help='The database, typically hg19 or mm9')
    parser.add_argument('composite', help='The composite name, wgEncodeCshlLongRnaSeq for instance')
    parser.add_argument('vars', metavar='VARS', type=str, nargs='+', help='The list of metadata variables to update from alpha to beta')

    if len(sys.argv) <= 1:
        parser.print_help()
    args = parser.parse_args(sys.argv[1:])
    vars = args.vars

    c = track.CompositeTrack(args.database, args.composite)
    newMdb = c.alphaMetaDb
    oldMdb = c.betaMetaDb
    temp = track.CompositeTrack(args.database, args.composite).betaMetaDb

    for i in vars:
        oldMdb = oldMdb.updateDiffFilter(i, newMdb)

    changeList, addlist, droplist = oldMdb.changeSummary(temp)
    print "Changes:"
    for key in changeList.keys():
        print key
        for line in changeList[key]:
            print "     %s" %(line)

    tmpFile = "%s.tmp" % c._betaMdbPath

    f = open(tmpFile, 'w')
    f.write("%s" % oldMdb)
    f.close()

    tmpTable = "%sQaUpdateMetaDataTemp" % args.composite

    cmd = "mdbUpdate %s -table=%s -recreate %s" % (args.database, tmpTable, tmpFile)
    p = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True)
    cmdoutput = p.stdout.read()

    cmd = "mdbPrint %s -table=%s -all >%s " % (args.database, tmpTable, c._betaMdbPath)
    p = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True)
    cmdoutput = p.stdout.read()

    cmd = "hgsql %s -e 'drop table %s' " % (args.database, tmpTable)
    p = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True)
    cmdoutput = p.stdout.read()

    cmd = "rm %s" % tmpFile
    p = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True)
    cmdoutput = p.stdout.read()


if __name__ == '__main__':
    main()
