"""Provides components to build nix components and process the result."""

from __future__ import annotations

import logging
import re
from tempfile import mkdtemp

from flupdt.common import bash_wrapper

drv_re = re.compile(r".*(/nix/store/.*\.drv).*")

OUTPUT_DIR = mkdtemp(prefix="flupdt-outputs-")


def build_output(path: str, output: str) -> str | None:
    """Builds a given output in a flake.

    :param path: path to flake
    :param output: flake output to be built
    :returns the .drv path on success or None on failure
    """
    logging.info(f"build {output}")
    logging.debug(f"outputting to {OUTPUT_DIR}/{output}.nixoutput")
    out = bash_wrapper(f"nix build {path}#{output} -o {OUTPUT_DIR}/{output}.nixoutput")
    logging.debug("output")
    logging.debug(out[0])
    logging.debug("error")
    logging.debug(out[1])
    logging.debug("statuscode")
    logging.debug(out[2])
    if out[2] != 0:
        logging.warning(f"output {output} did not build correctly")
        return None
    return ""