import shutil
import tempfile
from pathlib import Path

import pytest


def test_default_config():
    from unstructured.partition.utils.config import env_config

    assert env_config.IMAGE_CROP_PAD == 0


def test_env_override(monkeypatch):
    monkeypatch.setenv("IMAGE_CROP_PAD", str(1))
    from unstructured.partition.utils.config import env_config

    assert env_config.IMAGE_CROP_PAD == 1


@pytest.fixture()
def _setup_tmpdir():
    from unstructured.partition.utils.config import env_config

    _tmpdir = tempfile.tempdir
    _storage_tmpdir = env_config.GLOBAL_WORKING_PROCESS_DIR
    _storage_tmpdir_bak = f"{env_config.GLOBAL_WORKING_PROCESS_DIR}_bak"
    if Path(_storage_tmpdir).is_dir():
        shutil.move(_storage_tmpdir, _storage_tmpdir_bak)
        tempfile.tempdir = None
    yield
    if Path(_storage_tmpdir_bak).is_dir():
        if Path(_storage_tmpdir).is_dir():
            shutil.rmtree(_storage_tmpdir)
        shutil.move(_storage_tmpdir_bak, _storage_tmpdir)
        tempfile.tempdir = _tmpdir


@pytest.mark.usefixtures("_setup_tmpdir")
def test_env_storage_disabled(monkeypatch):
    monkeypatch.setenv("GLOBAL_WORKING_DIR_ENABLED", "false")
    from unstructured.partition.utils.config import env_config

    assert not env_config.GLOBAL_WORKING_DIR_ENABLED
    assert str(Path.home() / ".cache/unstructured") == env_config.GLOBAL_WORKING_DIR
    assert not Path(env_config.GLOBAL_WORKING_PROCESS_DIR).is_dir()
    assert tempfile.gettempdir() != env_config.GLOBAL_WORKING_PROCESS_DIR


@pytest.mark.usefixtures("_setup_tmpdir")
def test_env_storage_enabled(monkeypatch):
    monkeypatch.setenv("GLOBAL_WORKING_DIR_ENABLED", "true")
    from unstructured.partition.utils.config import env_config

    assert env_config.GLOBAL_WORKING_DIR_ENABLED
    assert str(Path.home() / ".cache/unstructured") == env_config.GLOBAL_WORKING_DIR
    assert Path(env_config.GLOBAL_WORKING_PROCESS_DIR).is_dir()
    assert tempfile.gettempdir() == env_config.GLOBAL_WORKING_PROCESS_DIR
