#!/usr/bin/env python3
# SPDX-FileCopyrightText: 2023 Sandro Knauß <hefee@debian.org>
# SPDX-License-Identifier: LGPL-2.0-or-later

import logging
import pathlib
import re
import sys

from debian import changelog
from debian import deb822
deb822_logger = logging.getLogger('debian.deb822')

rel_raw_re = re.compile('cannot parse package relationship ".*", returning it raw')
def filter_rel_raw_warning(record):
    return record.levelno != logging.WARNING or not rel_raw_re.match(record.getMessage())

sys.path.insert(0,'/usr/share/pkg-kde-tools')
from pythonlib import pkgkde

logging.basicConfig(format='%(levelname).1s: %(module)s:%(lineno)d: %(message)s')

log = logging.getLogger()
log.setLevel(logging.INFO)

PRERELEASE_STARTS_FROM_PATCH = 60

def main():
    with open("debian/changelog") as cl_file:
        deb_changelog = changelog.Changelog(file=cl_file)
    source_version_array = str(deb_changelog.upstream_version).split(".")
    source_major = int(source_version_array[0])
    source_minor = int(source_version_array[1])
    source_patch = int(source_version_array[2])

    plasma_version_major = source_major
    if source_patch < PRERELEASE_STARTS_FROM_PATCH:
        plasma_version_minor = source_minor
    else:
        plasma_version_minor = source_minor+1
        log.info(f"Detected plasma pre-release (upstream patch version {source_patch} >= {PRERELEASE_STARTS_FROM_PATCH}), bumping base version to {plasma_version_major}.{plasma_version_minor}")

    substvar_name = "plasma-version:Depends"
    substvar_value = set([f"plasma-version-base-{plasma_version_major}.{plasma_version_minor}"])
    log.info(f"Setting {substvar_name} to {substvar_value}")
    substvar_data = {
        substvar_name: substvar_value
    }

    control = pkgkde.DebianControl(pathlib.Path("debian/control"))
    for pkg_name, pkg in control.packages.items():
        checkHasPlasmaVarDep(pkg)
        substvars_path = pathlib.Path(f"debian/{pkg_name}.substvars")
        log.debug(f"{substvars_path}: add {substvar_data}")
        pkgkde.set_substvar(substvars_path, substvar_data)

def checkHasPlasmaVarDep(pkg):
    plasma_substvar_dep = '${plasma-version:Depends}'
    deb822_logger.addFilter(filter_rel_raw_warning)
    rels = deb822.PkgRelation.parse_relations(pkg.get('Depends'))
    deb822_logger.removeFilter(filter_rel_raw_warning)
    try:
        p = next(filter(lambda rel:rel[0]['name']==plasma_substvar_dep, rels))
    except StopIteration:
        log.warning(f"Binary package {pkg['Package']} doesn’t depend on {plasma_substvar_dep}")


if __name__ == '__main__':
    main()


