#! /usr/bin/python3
# SPDX-FileCopyrightText: 2026 Aurélien Coudec <coucouf@coucouf.fr>
# SPDX-License-Identifier: LGPL-2.1-or-later

import logging
import pathlib
import sys

from debian import changelog
from debian import deb822

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():
        if pkgkde.active_compat_version() < 14:
            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}'
    with pkgkde.deb822_filter_rel_raw_warning():
        rels = deb822.PkgRelation.parse_relations(pkg.get('Depends'))

    try:
        _ = 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()


