import codecs
import re
from os.path import abspath, dirname, join

from setuptools import setup

_COMMENT_RE = re.compile(r"(^|\s)+#.*$")


def _get_requirements(file_path):
    """Читает requirements.txt и возвращает список зависимостей.

    Поддерживает:
    - Удаление комментариев
    - Вложенные файлы через -r
    - Пустые строки игнорируются
    """
    with open(file_path, "r") as f:
        for line in f:
            line = _COMMENT_RE.sub("", line)
            line = line.strip()
            if not line:
                continue
            if line.startswith("-r "):
                # Вложенный requirements-файл
                nested_path = join(dirname(abspath(file_path)), line[3:])
                for req in _get_requirements(nested_path):
                    yield req
            else:
                # Просто добавляем строку как есть
                # (в текущем requirements.txt нет переменных окружения,
                # поэтому pkg_resources.Requirement не нужен)
                yield line


def _read(file_name):
    with codecs.open(file_name, "r", encoding="utf-8") as infile:
        return infile.read()


def main():
    setup(
        namespace_packages=("edu_to_analytics",),
        name="edu-to-analytics-web_edu",
        version="1.3.0",
        author="БАРС Груп",
        author_email="education_dev@bars-open.ru",
        description=_read("README.md"),
        url="https://stash.bars-open.ru/projects/EDUBASE/repos/edu_to_analytics",
        packages=["edu_to_analytics.data"],
        include_package_data=True,
        install_requires=list(_get_requirements("requirements.txt")),
    )


if __name__ == "__main__":
    main()
