import urllib.request
import urllib.parse
import urllib.error
import json
import os
import webbrowser
import ssl
import configparser

config = configparser.ConfigParser()
config.read('config.ini')

api_key = config['keys']['api_key']
service_url = config['keys']['service_url']

# Ignore SSL certificate errors
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

with open("where.txt") as fh, open("where.js", "w", encoding="utf-8") as where:
    adrs = []
    parms = {}
    for line in fh:

        address = line.strip()
        parms["address"] = address
        parms['key'] = api_key
        url = service_url + urllib.parse.urlencode(parms)

        if url.lower().startswith('http'):
            req = urllib.request.Request(url)
        else:
            raise ValueError from None

        with urllib.request.urlopen(req, context=ctx) as resp:

            data = resp.read().decode()

            try:
                js = json.loads(data)
            except Exception as e:
                print(f"{e}: {data}")
                continue

            try:
                adrs.append([js['results'][0]['geometry']['lat'],
                             js['results'][0]['geometry']['lng'],
                             js['results'][0]['formatted']])
                print('Retrieved ', url)
            except Exception as e:
                print(f"Not Found: {e}: {line.strip()}")

    print("\nOpening Webpage")

    where.write("myData = [\n")
    for item in adrs:
        where.write(f"[{str(item[0])}, {str(item[1])}, '{str(item[2])}' ], \n")
    where.write("];\n")

webbrowser.open('file://' + os.path.realpath("index.html"))