from .ubuntu2204 import Ubuntu2204TpInstaller
from util.string_util import replace_in_list
from .tpinstaller import TPInstallerBasis, UpdateMklAlternativesInstaller, \
    DebPackageInstaller, LibgdalJavaInstaller, AddDebRepoInstaller


class Debian12TpInstaller(Ubuntu2204TpInstaller):
    def __init__(self, profile):
        """
        TP Installer for Debian 12 bookworm
        :param Profile profile: the installation profile
        """
        super(Debian12TpInstaller, self).__init__(profile)
        self.pkg_postgis = ['postgis',
                            'postgresql-15-postgis-3',
                            'postgresql-15-postgis-3-scripts']

    def get_build_core_packages(self):
        ret = super(Debian12TpInstaller, self).get_build_core_packages()
        return ['libg2c-dev' if pkg == 'libgrib2c-dev' else pkg for pkg in ret]

    def get_run_systemtest_packages(self):
        ret = super(Debian12TpInstaller, self).get_run_systemtest_packages()
        ret += ['pylint', 'python3-grpcio']
        return ret

    def get_run_systemtest_pip_packages(self):
        # needed for rasdapy3 tests; the python3-grpcio system package makes rasql.py hang
        return []

    def get_run_core_packages(self):
        ret = super(Debian12TpInstaller, self).get_run_core_packages()
        return ['libpython3.11' if pkg == 'libpython3.10' else pkg for pkg in ret]

    def get_dependencies(self):
        deps = TPInstallerBasis()
        if self.profile.install_dependencies:
            if self.profile.install_type != "package":
                # non-free repo is needed for the libmkl-dev package
                deps = AddDebRepoInstaller(deps, ["deb https://deb.debian.org/debian bookworm non-free"])
                deps = DebPackageInstaller(deps, self.get_packages(self.profile))
            if self.profile.enterprise and (self.profile.systemtest or self.profile.generate_package):
                deps = UpdateMklAlternativesInstaller(deps)
            if self.profile.webapps_enabled:
                deps = LibgdalJavaInstaller(deps, "debian12")
        return deps
