import os,sys
import string
from optparse import OptionParser
import glob
import json
import pymongo
from pymongo import MongoClient
import datetime


__version__="1.0"
__status__ = "Dev"


def next_sequence_value(coll_obj, sequence_name):
    qry_obj = {'sequence_name': sequence_name}
    update_obj = {'$inc': {'sequence_value': 1}}
    res = coll_obj.update_one(qry_obj, update_obj, upsert=True)
    seq_doc = coll_obj.find_one(qry_obj)
    return int(seq_doc["sequence_value"])



def main():

    usage = "\n%prog  [options]"
    parser = OptionParser(usage,version="%prog version___")
    parser.add_option("-d","--dbname",action="store",dest="dbname",help="Database")
    parser.add_option("-c","--coll",action="store",dest="coll",help="Collection")
    parser.add_option("-v","--ver",action="store",dest="ver",help="Release version")

    (options,args) = parser.parse_args()
    for key in ([options.dbname, options.coll, options.ver]):
        if not (key):
            parser.print_help()
            sys.exit(0)

    db_name = options.dbname
    coll = options.coll
    ver = options.ver


    db_obj = { "mongodbuser":"gsadbadmin", "mongodbpassword":"gsadbpass"}
    db_obj["mongodbname"] = db_name
    if db_obj["mongodbname"] == "gsadb_beta":
        db_obj["mongodbuser"],db_obj["mongodbpassword"] = "gsadb_betaadmin","gsadb_betapass"  
    db_path = "/data/shared/gsa/releases/data/v-%s/jsondb/" % (ver)
    file_list = glob.glob(db_path + "%sdb/*.json" % (coll.replace("c_","")))


    try:
        client = pymongo.MongoClient('mongodb://localhost:27017',
            username=db_obj["mongodbuser"],
            password=db_obj["mongodbpassword"],
            authSource=db_obj["mongodbname"],
            authMechanism='SCRAM-SHA-1',
            serverSelectionTimeoutMS=10000
        )
        client.server_info()
        dbh = client[db_obj["mongodbname"]]
        nrecords = 0
        for in_file in file_list:
            doc = json.loads(open(in_file, "r").read())
            if "_id" in doc:
                doc.pop("_id")
            doc["createdts"] = datetime.datetime.now()
            doc["modifiedts"] = doc["createdts"]
            if coll == "c_glycan":
                primary_id = "recordid"
                sequence_name = "%s.id" % (coll)
                doc[primary_id] = next_sequence_value(dbh["c_counter"], sequence_name)
                pid_str = str(doc[primary_id])
                doc["gsa_id"] = "GSA000000000"[0:9-len(str(pid_str))] + pid_str
            
            result = dbh[coll].insert_one(doc)     
            nrecords += 1
        print (" ... loaded %s objects to %s" % (nrecords, coll))
    except pymongo.errors.ServerSelectionTimeoutError as err:
        print (err)
    except pymongo.errors.OperationFailure as err:
        print (err)



if __name__ == '__main__':
        main()
