#!/usr/bin/env python3

import glob
import os
import re
import urllib.parse
import subprocess

os.environ["DOLLAR"] = '$'
os.environ["VISIBLE_WEB_HOST_RE_ESCAPED"] = re.escape(os.environ.get('VISIBLE_WEB_HOST'))
os.environ["VISIBLE_ENTRY_POINT_RE_ESCAPED"] = re.escape(os.environ.get('VISIBLE_ENTRY_POINT'))
os.environ["MAPSERVER_DATA_SUBSELECT"] = (
    "SELECT ST_Collect(ra.area) "
    "FROM {PGSCHEMA}.restrictionarea AS ra, {PGSCHEMA}.role_restrictionarea AS rra, "
    "{PGSCHEMA}.layer_restrictionarea AS lra, {PGSCHEMA}.treeitem AS la "
    "WHERE rra.role_id in (%role_ids%) AND rra.restrictionarea_id = ra.id "
    "AND lra.restrictionarea_id = ra.id AND lra.layer_id = la.id AND la.name = "
).format(PGSCHEMA=os.environ["PGSCHEMA"])
os.environ["MAPSERVER_DATA_NOAREA_SUBSELECT"] = (
    "SELECT rra.role_id "
    "FROM {PGSCHEMA}.restrictionarea AS ra, {PGSCHEMA}.role_restrictionarea AS rra, "
    "{PGSCHEMA}.layer_restrictionarea AS lra, {PGSCHEMA}.treeitem AS la "
    "WHERE rra.restrictionarea_id = ra.id AND lra.restrictionarea_id = ra.id "
    "AND lra.layer_id = la.id AND la.name = "
).format(PGSCHEMA=os.environ["PGSCHEMA"])
os.environ["MAPSERVER_JOIN_TABLES"] = (
    "{PGSCHEMA}.restrictionarea AS ra, {PGSCHEMA}.role_restrictionarea AS rra, "
    "{PGSCHEMA}.layer_restrictionarea AS lra, {PGSCHEMA}.treeitem AS la"
).format(PGSCHEMA=os.environ["PGSCHEMA"])
os.environ["MAPSERVER_JOIN_WHERE"] = (
    "rra.role_id in (%role_ids%) AND rra.restrictionarea_id = ra.id AND "
    "lra.restrictionarea_id = ra.id AND lra.layer_id = la.id AND la.name = "
)

SCHEME_PORT = {
    "http": 80,
    "https": 443,
}
for name in ("GEOPORTAL", "TILECLOUDCHAIN"):
    if name + "_INTERNAL_URL" in os.environ:
        url = urllib.parse.urlparse(os.environ[name + "_INTERNAL_URL"])
        os.environ[name + "_INTERNAL_HOST"] = url.hostname
        os.environ[name + "_INTERNAL_PORT"] = str(url.port or SCHEME_PORT.get(url.scheme, "NULL"))


def evaluate(filename):
    print("Evaluate: " + filename)
    with open(filename) as in_:
        with open(filename[:-5], "w") as out:
            subprocess.check_call(["envsubst"], stdin=in_, stdout=out)


for filename in glob.glob("/etc/**/*.tmpl", recursive=True):
    evaluate(filename)

for filename in glob.glob("/usr/local/tomcat/webapps/**/*.tmpl", recursive=True):
    evaluate(filename)
