#!/usr/bin/env python3

import logging
from typing import Optional
from rad_development_python import bash_wrapper
import re

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


def evaluate_output(path: str, output: str) -> Optional[str]:
    logging.info(f"evaluating {output}")
    out = bash_wrapper(f"nix eval {path}#{output}")
    logging.debug(out[0])
    logging.debug(out[1])
    logging.debug(out[2])
    if out[2] != 0:
        logging.warning(f"output {output} did not evaluate correctly")
        return None
    else:
        drv_match = drv_re.match(out[0])
        if drv_match is None:
            out_msg = "derivation succeeded but output derivation does not contain a derivation"
            raise RuntimeError(out_msg)
        drv = drv_match.group(1)
        logging.debug(f"derivation evaluated to {drv}")