/*
 * Copyright 2019-2023 Mamoe Technologies and contributors.
 *
 * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
 * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
 *
 * https://github.com/mamoe/mirai/blob/dev/LICENSE
 */

package net.mamoe.mirai.dokka

import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.json.Json
import java.io.File

val pages = File("mirai-dokka/pages")

@OptIn(ExperimentalSerializationApi::class)
val json = Json {
    prettyPrint = true
    prettyPrintIndent = "  "
}

private val FileDevNull = File(
    if (System.getProperty("os.name")
            .startsWith("Windows")
    ) "NUL" else "/dev/null"
)

fun system(cmd: String) {
    val rsp = ProcessBuilder(cmd).inheritIO().start().waitFor()
    if (rsp != 0) error("Exec return $rsp, $cmd")
}

fun exec(vararg cmd: String) {
    val rsp = ProcessBuilder(*cmd).inheritIO().start().waitFor()
    if (rsp != 0) error("Exec return $rsp, ${cmd.joinToString(" ")}")
}

fun repoexec(
    vararg cmd: String,
    nooutput: Boolean = false,
) {
    val rsp = ProcessBuilder(*cmd)
        .inheritIO()
        .directory(pages)
        .also { builder ->
            if (nooutput) {
                builder.redirectOutput(ProcessBuilder.Redirect.to(FileDevNull))
            }
        }
        .start()
        .waitFor()
    if (rsp != 0) error("Exec return $rsp, ${cmd.joinToString(" ")}")
}