# shellcheck    shell=dash

# ___x_cmd_pkg_sphere_gc_recycle  --sphere X <pkg name> <version>
___x_cmd_pkg_sphere_gc_recycle(){
    pkg:sphere:parse:args
    pkg:debug --pkg "$name" --version "$version" --osarch "$osarch" --sphere_path "$___X_CMD_PKG_ROOT_SPHERE/$sphere_name" recycle

    if ___x_cmd_pkg_sphere_link exist   \
            --sphere "$sphere_name"                     \
            --sphereroot "$___X_CMD_PKG_ROOT_SPHERE"    \
            --osarch "$osarch" "$name" "$version"; then
        pkg:debug "Cannot be recycled because [name=$name] [version=$version] [osarch=$osarch] is inside linked"
        return 1
    fi

    if ___x_cmd_pkg_sphere_safelist exist   \
            --sphere "$sphere_name"                     \
            --sphereroot "$___X_CMD_PKG_ROOT_SPHERE"    \
            --osarch "$osarch" "${name}=${version}"; then
        pkg:debug "Cannot be recycled because [name=$name] [version=$version] [osarch=$osarch] is inside the safelist"
        return 1
    fi

    local level=warn
    if ___x_cmd_pkg_sphere_depend file exist    \
            --sphere "$sphere_name"                     \
            --sphereroot "$___X_CMD_PKG_ROOT_SPHERE"    \
            --osarch "$osarch" "$name" "$version"; then

        ___x_cmd_pkg_sphere_gc_recycle___is_confirmed "$osarch" "$name" "$version" || level=debug
        ___x_cmd log :pkg "$level" "Cannot be recycled because [name=$name] [version=$version] [osarch=$osarch] is depeneded => \`x pkg sphere depend dependency $name $version\`"
        return 1
    fi

    pkg:debug "The package can be recycled"
    return 0
}

___x_cmd_pkg_sphere_gc_recycle___set_confirmed(){
    local name="$1"; local version="$2"; local osarch="$3"
    ___X_CMD_PKG_SPHERE_GC_RECYCLE_CONFIRMED="$___X_CMD_PKG_SPHERE_GC_RECYCLE_CONFIRMED
$name/$version/$osarch"
}

___x_cmd_pkg_sphere_gc_recycle___is_confirmed(){
    local name="$1"; local version="$2"; local osarch="$3"
    local nl="$___X_CMD_UNSEENCHAR_NEWLINE"
    local line="${___X_CMD_PKG_SPHERE_GC_RECYCLE_CONFIRMED}${nl}"
    [ "$line" != "${line#*"${nl}$name/$version/$osarch${nl}"}" ]
}
