"""Implementation of download method."""
import os
import xml.etree.ElementTree as ET
import re

import requests
from six.moves.urllib.request import urlopen
from six.moves import configparser


config = configparser.ConfigParser()
config_path = os.path.join(os.path.dirname(
    os.path.abspath(__file__)), "config.ini")
config.read(config_path)


def get_available_models():
    """Returns available models."""
    root = ET.parse(urlopen("https://minio.clarin-pl.eu/public")).getroot()
    available_models = []
    for child in root.findall(
            "{http://s3.amazonaws.com/doc/2006-03-01/}Contents"):
        if "models/plwn_api_dumps/" in str(
                child.find(
                    "{http://s3.amazonaws.com/doc/2006-03-01/}Key").text):
            string = child.find(
                "{http://s3.amazonaws.com/doc/2006-03-01/}Key").text
            substring = r"models/plwn_api_dumps/"
            available_models.append(re.sub(substring, r'', string))
    return available_models


def download(name="default_model"):
    """After called it downloads a specified database model."""
    models = get_available_models()
    if name == "default_model":
        url = config["DOWNLOAD"][name]
        r = requests.get(url)
        with open(name, "wb") as f:
            f.write(r.content)
            f.close()
        return
    if name in models:
        url = config["DOWNLOAD"]["default_model"]
        url = url.replace("plwn_dump_new_07-12-2022.sqlite", name)
        r = requests.get(url)
        with open(name, "wb") as f:
            f.write(r.content)
            f.close()
    else:
        print("Cannot download: ",
              name,
              "\n Possible download options: ",
              models)