UPGRADE_FW_MAJOR="2022-09-13-0-11012d53-22.08-plus"
UPGRADE_FW_VERSION="2023-12-15-0-f43dca21-23.12-plus"
UPGRADE_FW_REQUIRE="2022-09-13-0-11012d53-22.08-plus"
current_fw_version() {
    cat /etc/bos_version
}

current_fw_major() {
    cat /etc/bos_major
}

check_fw_version() {
    echo "Gathering current firmware information..."

    local board_name=$1
    local fw_major=$(current_fw_major)
    local fw_version=$(current_fw_version)

    echo "board  : $board_name"
    echo "version: $fw_version"
    echo "major  : $fw_major"

    echo "Checking compatibility..."

    if [ "$UPGRADE_FW_VERSION" ">" "$fw_version" ]; then
        # firmware upgrade
        if [ "$UPGRADE_FW_REQUIRE" ">" "$fw_version" ]; then
            echo "Firmware upgrade to '$UPGRADE_FW_VERSION' is not possible!"
            echo "Firmware version '$UPGRADE_FW_REQUIRE' is required before upgrading to this version."
            return 1
        fi
    elif [ "$UPGRADE_FW_VERSION" "<" "$fw_version" ]; then
        # firmware downgrade
        if [ "$UPGRADE_FW_MAJOR" != "$fw_major" ]; then
            echo "Firmware downgrade to '$UPGRADE_FW_VERSION' is not possible!"
            echo "Downgrade is only possible among firmwares with major version '$UPGRADE_FW_MAJOR'."
            echo "Do the factory reset and try to upgrade to this version."
            return 1
        fi
    fi

    return 0
}

check_image() {
    check_fw_version $1
}

do_upgrade_sd() {
    local package_root="$1"
    local sdcard_root="$2"

    echo "    rootfs.img"
    cp "$package_root/rootfs.img" "$sdcard_root/"

    return 0
}

do_upgrade_nand() {
    local image_file="$1"
    local install_partition="$2"

    flash_eraseall "$install_partition"
    nandwrite -p "$install_partition" "$image_file"

    return 0
}

do_upgrade() {
    # For backward compatibility with only sd version we have to keep do_upgrade naming of function
    # TODO: when major version is released this backward compatibility can be removed

    local package_root="$1"
    local sdcard_root="$2"

    do_upgrade_sd $package_root $sdcard_root
}
