from configparser import ConfigParser
from os import mkdir
from os.path import expanduser, join, exists
import pathlib
from setuptools import find_packages, setup, Extension


HERE = pathlib.Path(__file__).parent
README = (HERE/"README.txt").read_text()

USER_HOME_DIR = expanduser("~")
CML_DIR_NAME = ".conML"
DEFAULT_LEARN_DIR = "data"
CONFIG_FILE_NAME = "settings.ini"
DEFAULT_TRAINING_SET = "toyset.csv"
KNOWLEDGE_DIR = "knowledge"

CML_CONFIG_DIR = join(USER_HOME_DIR, CML_DIR_NAME)
CML_DEFAULT_LEARN_DIR = join(CML_CONFIG_DIR, DEFAULT_LEARN_DIR)
CONFIG_FILE_PATH = join(CML_CONFIG_DIR, CONFIG_FILE_NAME)
DEFAULT_TRAINING_SET_PATH = join(CML_DEFAULT_LEARN_DIR, DEFAULT_TRAINING_SET)
KNOWLEDGE_DIR_PATH = join(CML_CONFIG_DIR, KNOWLEDGE_DIR)


def create_cml_config_dir():
    mkdir(CML_CONFIG_DIR)


def create_data_dir():
    mkdir(CML_DEFAULT_LEARN_DIR)


def insert_default_settings_into_config_file():
    config = ConfigParser()
    config.read(CONFIG_FILE_PATH)
    config["GENERAL"]["input_file"] = DEFAULT_TRAINING_SET_PATH
    config["GENERAL"]["learn_dir"] = CML_DEFAULT_LEARN_DIR
    config["GENERAL"]["knowledge_dir"] = KNOWLEDGE_DIR_PATH
    write_configs(config)


def write_configs(config):
    with open(CONFIG_FILE_PATH, 'w') as configfile:
        config.write(configfile)


if not exists(CML_CONFIG_DIR):
    create_cml_config_dir()


setup(
    name="conML",
    packages=find_packages(),
    version=0.40,
    licence="MIT",
    description="constructivist machine learning",
    long_description=README,
    long_description_content_type="text/plain",
    data_files=[(CML_CONFIG_DIR, ["conML/static/settings.ini"]),
                (CML_DEFAULT_LEARN_DIR, ["conML/static/toyset.csv"]),
                (CML_CONFIG_DIR, ["conML/static/logging.ini"])],
    author="Dmitrij Denisenko",
    install_requires=[
        "numpy==1.19.2",
        "krippendorff==0.4.0",
        "scikit-learn==0.23.2",
        "scipy==1.6.1",
        "pandas==1.2.2"
    ]
)