#!/usr/bin/env python
"""
This script bootstraps Phobos from a supplied path and feeds it
information regarding EVE data paths and where to dump data. It then imports
some other scripts and uses them to convert the json data into a SQLite
database and then compare the new database to the existing one, producing a
diff which can then be used to assist in the updating.
"""

import sys
import os

# Phobos location
phb_path = os.path.expanduser("path/to/phobos")

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-e", "--eve", dest="eve_path", help="Location of EVE directory", required=True)
parser.add_argument("-c", "--cache", dest="cache_path", help="Location of EVE cache directory. If not specified, an attempt will be make to automatically determine path.")
parser.add_argument("-r", "--res", dest="res_path", help="Location of EVE shared resource cache. If not specified, an attempt will be make to automatically determine path.")
parser.add_argument("-d", "--dump", dest="dump_path", help="Location of Phobos JSON dump directory", required=True)
parser.add_argument("-p", "--phobos", dest="phb_path", help="Location of Phobos, defaults to path noted in script", default=phb_path)
parser.add_argument("-s", "--singularity", action="store_true", help="Singularity build")

args = parser.parse_args()
eve_path = os.path.expanduser(args.eve_path)
cache_path = os.path.expanduser(args.cache_path) if args.cache_path else None
res_path = os.path.expanduser(args.res_path) if args.res_path else None
dump_path = os.path.expanduser(args.dump_path)
script_path = os.path.dirname(__file__)

### Append Phobos to path
sys.path.append(os.path.expanduser(args.phb_path))

def header(text, subtext=None):
    print()
    print("* "*30)
    print(text.center(60))
    if subtext:
        print(subtext.center(60))
    print("* "*30)
    print()

header("Dumping Phobos Data", dump_path)

import reverence
from flow import FlowManager
from miner import *
from translator import Translator
from writer import *

rvr = reverence.blue.EVE(eve_path, cachepath=args.cache_path, sharedcachepath=res_path, server="singularity" if args.singularity else "tranquility")
print("EVE Directory: {}".format(rvr.paths.root))
print("Cache Directory: {}".format(rvr.paths.cache))
print("Shared Resource Directory: {}".format(rvr.paths.sharedcache))

pickle_miner = ResourcePickleMiner(rvr)
trans = Translator(pickle_miner)
bulkdata_miner = BulkdataMiner(rvr, trans)
staticcache_miner = ResourceStaticCacheMiner(rvr, trans)
miners = (
    MetadataMiner(eve_path),
    bulkdata_miner,
    staticcache_miner,
    TraitMiner(staticcache_miner, bulkdata_miner, trans),
    SqliteMiner(rvr.paths.root, trans),
    CachedCallsMiner(rvr, trans),
    DynamicAttributesMiner(rvr),
    pickle_miner
)

writers = (
    JsonWriter(dump_path, indent=2),
)

list = "dgmexpressions,dgmattribs,dgmeffects,dgmtypeattribs,dgmtypeeffects,"\
       "dgmunits,invcategories,invgroups,invmetagroups,invmetatypes,"\
       "invtypes,mapbulk_marketGroups,phbmetadata,phbtraits,fsdTypeOverrides,"\
       "evegroups,evetypes,evecategories,mapbulk_marketGroups,clonegrades,dynamicattributes"

FlowManager(miners, writers).run(list, "en-us")
