from twisted.internet import reactor
from twisted.web import static, proxy, server

import os
import json
import sys
import requests

asterix_host = "localhost"
asterix_port = 19002

# First, let's get the path to this script, we'll need it to configure the demo.
base = os.path.dirname(os.path.realpath(__file__))
print "Running Black Cherry from",base

# First, we bootstrap our request query
print "Preparing DDL..\n"
query_statement = open("src/data/query.txt").read().split("load")
query_statement[1] = "load" + query_statement[1].replace("FULL_PATH",base + "/src/data")

ddl = {
    'ddl': query_statement[0]
}

load = {
    "statements" : "use dataverse twitter; " + query_statement[1]
}

http_header = {
    'content-type': 'application/json'
}

print query_statement

# Now we run our query
print "Running query...\n"

ddl_url = "http://" + asterix_host + ":" + str(asterix_port) + "/ddl"
update_url = "http://" + asterix_host + ":" + str(asterix_port) + "/update"
requests.get(ddl_url, params=ddl)
response = requests.get(update_url, params=load, headers=http_header)
if (response.status_code != 200):
    print "Oh no, something went wrong! Could not load dataset. Is Asterix running on this host?"
    sys.exit()

print "Please open http://localhost:8080/cherry.html"

# Now we obtain the path of this simple python server, and appends src to it (where Black Cherry lives)
path = os.path.dirname(os.path.realpath(__file__)) + "/src"
root = static.File(path)     # will be served under '/'

# reverse proxy, served under '/asterix', with same endpoints as Asterix REST API
# http://test.company.com/service1/v1/JsonService -> becomes http://localhost/svc/service1/v1/JsonService
root.putChild('asterix', proxy.ReverseProxyResource(asterix_host, asterix_port, ''))

# magic
site = server.Site(root)
reactor.listenTCP(8080, site)
reactor.run()
