#!/usr/bin/env python3
"""Download the latest Polymer v1 iconset for materialdesignicons.com."""

import gzip
import os
import re
import requests
import sys

from fingerprint_frontend import fingerprint

GETTING_STARTED_URL = ('https://raw.githubusercontent.com/Templarian/'
                       'MaterialDesign/master/site/getting-started.savvy')
DOWNLOAD_LINK = re.compile(r'(/api/download/polymer/v1/([A-Z0-9-]{36}))')
START_ICONSET = '<iron-iconset-svg'

OUTPUT_BASE = os.path.join('homeassistant', 'components', 'frontend')
ICONSET_OUTPUT = os.path.join(OUTPUT_BASE, 'www_static', 'mdi.html')
ICONSET_OUTPUT_GZ = os.path.join(OUTPUT_BASE, 'www_static', 'mdi.html.gz')


def get_remote_version():
    """Get current version and download link."""
    gs_page = requests.get(GETTING_STARTED_URL).text

    mdi_download = re.search(DOWNLOAD_LINK, gs_page)

    if not mdi_download:
        print("Unable to find download link")
        sys.exit()

    return 'https://materialdesignicons.com' + mdi_download.group(1)


def clean_component(source):
    """Clean component."""
    return source[source.index(START_ICONSET):]


def write_component(source):
    """Write component."""
    with open(ICONSET_OUTPUT, 'w') as outp:
        print('Writing icons to', ICONSET_OUTPUT)
        outp.write(source)

    with gzip.open(ICONSET_OUTPUT_GZ, 'wb') as outp:
        print('Writing icons gz to', ICONSET_OUTPUT_GZ)
        outp.write(source.encode('utf-8'))


def main():
    """Main section of the script."""
    # All scripts should have their current work dir set to project root
    if os.path.basename(os.getcwd()) == 'script':
        os.chdir('..')

    print("materialdesignicons.com icon updater")

    remote_url = get_remote_version()
    source = clean_component(requests.get(remote_url).text)
    write_component(source)
    fingerprint()

    print('Updated to latest version')


if __name__ == '__main__':
    main()
