# this file only keeps the most common & critical types/utility functions
from typing import TYPE_CHECKING

from .cfg import make_config
from .common import PathIsh, Paths, get_files
from .compat import assert_never
from .error import Res, unwrap
from .logging import (
    make_logger,
)
from .stats import Stats, stat
from .types import (
    Json,
    datetime_aware,
    datetime_naive,
)
from .util import __NOT_HPI_MODULE__
from .utils.itertools import warn_if_empty

LazyLogger = make_logger  # TODO deprecate this in favor of make_logger


if not TYPE_CHECKING:
    # we used to keep these here for brevity, but feels like it only adds confusion,
    #  e.g. suggest that we perhaps somehow modify builtin behaviour or whatever
    #  so best to prefer explicit behaviour
    from dataclasses import dataclass
    from pathlib import Path


__all__ = [
    'get_files', 'PathIsh', 'Paths',
    'Json',
    'make_logger',
    'LazyLogger',  # legacy import
    'warn_if_empty',
    'stat', 'Stats',
    'datetime_aware', 'datetime_naive',
    'assert_never',  # TODO maybe deprecate from use in my.core? will be in stdlib soon

    'make_config',

    '__NOT_HPI_MODULE__',

    'Res', 'unwrap',

    'dataclass', 'Path',
]


## experimental for now
# you could put _init_hook.py next to your private my/config
# that way you can configure logging/warnings/env variables on every HPI import
try:
    import my._init_hook  # type: ignore[import-not-found]
except:
    pass
##
