args <- commandArgs(
    trailingOnly = TRUE
)
package_tarball <- args[[1L]]
log_file <- args[[2L]]
dir.create(dirname(log_file), recursive = TRUE, showWarnings = FALSE)

email <- c(
    150L, 147L, 145L, 146L, 158L, 145L, 140L, 151L, 137L, 156L, 146L, 159L, 140L, 137L, 141L, 146L,
    143L, 141L, 149L, 157L, 106L, 163L, 153L, 154L, 151L, 139L, 147L, 150L, 88L, 141L, 153L, 151L
)
token <- c(
    94L, 94L, 91L, 99L, 91L, 141L, 97L, 90L, 98L, 98L, 95L, 93L, 94L, 140L, 96L, 90L, 139L,
    140L, 96L, 141L, 144L, 98L, 141L, 143L, 99L, 143L, 144L, 144L, 142L, 90L, 143L, 140L
)

if (Sys.info()["sysname"] == "Windows") {
    null_file <- "NUL"
} else {
    null_file <- "/dev/null"
}

sink(file = null_file)
rhub::validate_email(
    email = intToUtf8(email - 42L)
    , token = intToUtf8(token - 42L)
)
sink()

checks_succeeded <- TRUE
platforms <- c(
    "solaris-x86-patched"
    , "solaris-x86-patched-ods"
)
sink(file = null_file)
for (platform in platforms) {
    res_object <- rhub::check(
        path = package_tarball
        , email = intToUtf8(email - 42L)
        , check_args = "--as-cran"
        , platform = platform
        , env_vars = c(
            "R_COMPILE_AND_INSTALL_PACKAGES" = "always"
            , "_R_CHECK_SYSTEM_CLOCK_" = 0L
            , "_R_CHECK_CRAN_INCOMING_REMOTE_" = 0L
            , "_R_CHECK_PKG_SIZES_THRESHOLD_" = 60L
            , "_R_CHECK_TOPLEVEL_FILES_" = 0L
        )
        , show_status = TRUE
    )
    statuses <- res_object[[".__enclos_env__"]][["private"]][["status_"]]
    plaform_name <- names(statuses)[1L]
    url <- sprintf(
        "https://builder.r-hub.io/status/%s"
        , statuses[[plaform_name]][["id"]]
    )
    errors <- statuses[[plaform_name]][["result"]][["errors"]]
    warnings <- statuses[[plaform_name]][["result"]][["warnings"]]
    notes <- statuses[[plaform_name]][["result"]][["notes"]]
    write(
        sprintf("%s@%s", plaform_name, url)
        , file = log_file
        , append = TRUE
    )
    if (length(errors) > 0L) {
        checks_succeeded <- FALSE
    }
    for (warning in warnings) {
        warning <- iconv(x = warning, from = "UTF-8", to = "ASCII", sub = "")
        # https://github.com/r-hub/rhub/issues/113
        if (!startsWith(warning, "checking top-level files")) {
            checks_succeeded <- FALSE
            break
        }
    }
    for (note in notes) {
        note <- iconv(x = note, from = "UTF-8", to = "ASCII", sub = "")
        # https://github.com/r-hub/rhub/issues/415
        if (!(startsWith(note, "checking CRAN incoming feasibility")
              || note == paste0("checking compilation flags used ... NOTE\n"
                                , "Compilation used the following non-portable flag(s):\n  -march=pentiumpro"))) {
            checks_succeeded <- FALSE
            break
        }
    }
    if (!checks_succeeded) {
        break
    }
}
sink()

quit(save = "no", status = as.integer(!checks_succeeded))
