#!/usr/bin/env nix-shell
#!nix-shell -i python3 -p python3

import os
import urllib.request

download_urls = {
    "brave": {
        "aarch64-linux": "https://github.com/brave/brave-browser/releases/download/v${version}/brave-browser_${version}_arm64.deb",
        "x86_64-linux": "https://github.com/brave/brave-browser/releases/download/v${version}/brave-browser_${version}_amd64.deb",
        "aarch64-darwin": "https://github.com/brave/brave-browser/releases/download/v${version}/brave-v${version}-darwin-arm64.zip",
    },
    "brave-origin": {
        "aarch64-linux": "https://github.com/brave/brave-browser/releases/download/v${version}/brave-origin_${version}_arm64.deb",
        "x86_64-linux": "https://github.com/brave/brave-browser/releases/download/v${version}/brave-origin_${version}_amd64.deb",
        "aarch64-darwin": "https://github.com/brave/brave-browser/releases/download/v${version}/brave-origin-v${version}-darwin-arm64.zip",
    },
}


def wget(url):
    res = urllib.request.urlopen(url)
    assert res.code == 200
    return res.read().decode("ascii")


def get_version(base_url):
    # Grab version strings for each system, and make sure they all match.
    versions = set(
        wget(f"{base_url}{channel_platform}.version")
        for channel_platform in [
            "release-linux-arm64",
            "release-linux-x64",
            "release-macos-arm64",
        ]
    )
    assert len(versions) == 1
    return versions.pop()


def write_package(flavor, version):
    with open(f"packages/{flavor}.nix", "wt") as f:

        print("# Expression generated by update.py; do not edit it by hand!", file=f)
        print("rec {", file=f)
        print(f'  pname = "{flavor}";', file=f)
        print(f'  version = "{version}";', file=f)

        if flavor == "brave-origin":
            print('  flavor = "origin";', file=f)

        print("\n  archives = {", file=f)

        for arch in download_urls[flavor].keys():
            url = download_urls[flavor][arch]
            hashurl = url.replace("${version}", version) + ".sha256"
            hash = wget(hashurl).split(" ")[0]

            print(f"    {arch} = {{", file=f)
            print(f'      url = "{url}";', file=f)
            print(f'      sha256 = "{hash}";', file=f)
            print(f"    }};", file=f)

        print("  };", file=f)
        print("}", file=f)


def main():
    os.chdir(os.path.dirname(__file__))

    brave_version = get_version(f"https://versions.brave.com/latest/")
    origin_version = get_version(f"https://versions.brave.com/latest/origin-")

    print(f"brave ver  -> {brave_version}")
    print(f"origin ver -> {origin_version}")

    write_package("brave", brave_version)
    write_package("brave-origin", origin_version)

    print("Successfully updated!")


if __name__ == "__main__":
    main()
