import io
import os
import sys
import warnings

from .distribution import Distribution


def _gather_py2(top, candidates):  # pragma NO COVER Py3k
    def _filter(candidates, dirname, fnames):
        for fname in fnames:
            fqn = os.path.join(dirname, fname)
            if os.path.isdir(fqn):
                if fname == "EGG-INFO" or fname.endswith(".egg-info"):
                    candidates.append(fqn)

    os.path.walk(top, _filter, candidates)


def _gather_py3(top, candidates):  # pragma NO COVER Python2
    for dirpath, dirnames, fnames in os.walk(top):
        for dirname in dirnames:
            fqn = os.path.join(dirpath, dirname)
            if dirname == "EGG-INFO" or dirname.endswith(".egg-info"):
                candidates.append(fqn)


if sys.version_info[0] < 3:  # pragma NO COVER Python2
    _gather = _gather_py2
else:  # pragma NO COVER Py3k
    _gather = _gather_py3


class Develop(Distribution):
    def __init__(self, path, metadata_version=None):
        self.path = os.path.abspath(os.path.normpath(os.path.expanduser(path)))
        self.metadata_version = metadata_version
        self.extractMetadata()

    def read(self):
        candidates = [self.path]
        _gather(self.path, candidates)
        for candidate in candidates:
            path = os.path.join(candidate, "PKG-INFO")
            if os.path.exists(path):
                with io.open(path, errors="ignore") as f:
                    return f.read()
        warnings.warn("No PKG-INFO found for path: %s" % self.path)
