# -*- coding: utf-8 -*-
import re
import socket
import urllib.parse

from m3u8_to_mp4.networks.http_base import AddressInfo


def available_addr_infos_of_url(url):
    scheme, netloc, path, query, fragment = urllib.parse.urlsplit(url)

    specific_port_pattern = re.compile(r':(\d+)')
    specific_ports = re.findall(specific_port_pattern, netloc)

    netloc = re.sub(specific_port_pattern, '', netloc)

    # todo:: support IPv6
    addr_infos = socket.getaddrinfo(host=netloc, port=scheme,
                                    family=socket.AF_INET)

    available_addr_info_pool = list()
    for family, type, proto, canonname, sockaddr in addr_infos:
        port = specific_ports[0] if len(specific_ports) > 0 else sockaddr[1]
        ai = AddressInfo(host=sockaddr[0], port=port, family=family,
                         proto=proto)
        available_addr_info_pool.append(ai)

    return available_addr_info_pool