#!%{__python3}
import subprocess
import os
import json
import shutil


def prepare(target):
    # clone the flatpak json
    cmd = ['git', 'submodule', 'update', '--remote', 'contrib/flatpak']
    subprocess.run(cmd, check=True)

    # clone the submodules for that
    cmd = ['git', 'submodule', 'update', '--init', '--remote', 'shared-modules/']
    subprocess.run(cmd, cwd='contrib/flatpak', check=True)

    # parse json
    if os.path.isdir('build'):
        shutil.rmtree('build')
    data = {}
    with open('contrib/flatpak/org.freedesktop.fwupd.json', 'r') as rfd:
        data = json.load(rfd, strict=False)
    platform = 'runtime/%s/x86_64/%s' % (data['runtime'], data['runtime-version'])
    sdk = 'runtime/%s/x86_64/%s' % (data['sdk'], data['runtime-version'])
    num_modules = len(data['modules'])

    # update to build from master
    data["branch"] = "master"
    for index in range(0, num_modules):
        module = data['modules'][index]
        if type(module) != dict or not 'name' in module:
            continue
        name = module['name']
        if not 'fwupd' in name:
            continue
        data['modules'][index]['sources'][0].pop('url')
        data['modules'][index]['sources'][0].pop('sha256')
        data['modules'][index]['sources'][0]['type'] = 'dir'
        data['modules'][index]['sources'][0]['skip'] = [".git"]
        data['modules'][index]['sources'][0]['path'] = ".."

    # write json
    os.mkdir('build')
    with open(target, 'w') as wfd:
        json.dump(data, wfd, indent=4)
    os.symlink('../contrib/flatpak/shared-modules', 'build/shared-modules')

    # install the runtimes (parsed from json!)
    repo = 'flathub'
    repo_url = 'https://dl.flathub.org/repo/flathub.flatpakrepo'
    print("Installing dependencies")
    cmd = ['flatpak', 'remote-add', '--if-not-exists', repo, repo_url]
    subprocess.run(cmd, check=True)
    cmd = ['flatpak', 'install', '--assumeyes', repo, sdk]
    subprocess.run(cmd, check=True)
    cmd = ['flatpak', 'install', '--assumeyes', repo, platform]
    subprocess.run(cmd, check=True)


def build(target):
    cmd = [
        'flatpak-builder',
        '--repo=repo',
        '--force-clean',
        '--disable-rofiles-fuse',
        'build-dir',
        target,
    ]
    subprocess.run(cmd, check=True)
    cmd = ['flatpak', 'build-bundle', 'repo', 'fwupd.flatpak', 'org.freedesktop.fwupd']
    subprocess.run(cmd, check=True)


if __name__ == '__main__':
    t = os.path.join('build', 'org.freedesktop.fwupd.json')
    prepare(t)
    build(t)

# to run from the builddir:
# sudo flatpak-builder --run build-dir org.freedesktop.fwupd.json /app/libexec/fwupd/fwupdtool get-devices

# install the single file bundle
# flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
# flatpak install fwupd.flatpak

# to run a shell in the same environment that flatpak sees:
# flatpak run --command=sh --devel org.freedesktop.fwupd

# to run fwupdtool as root:
# sudo flatpak run org.freedesktop.fwupd --verbose get-devices
