package org.jetbrains.dokka.utilities

interface DokkaLogger {
    var warningsCount: Int
    var errorsCount: Int
    fun debug(message: String)
    fun info(message: String)
    fun progress(message: String)
    fun warn(message: String)
    fun error(message: String)
}

fun DokkaLogger.report() {
    if (DokkaConsoleLogger.warningsCount > 0 || DokkaConsoleLogger.errorsCount > 0) {
        info("Generation completed with ${DokkaConsoleLogger.warningsCount} warning" +
                (if(DokkaConsoleLogger.warningsCount == 1) "" else "s") +
                " and ${DokkaConsoleLogger.errorsCount} error" +
                if(DokkaConsoleLogger.errorsCount == 1) "" else "s"
        )
    } else {
        info("generation completed successfully")
    }
}

object DokkaConsoleLogger : DokkaLogger {
    override var warningsCount: Int = 0
    override var errorsCount: Int = 0

    override fun debug(message: String)= println(message)

    override fun progress(message: String) = println("PROGRESS: $message")

    override fun info(message: String) = println(message)

    override fun warn(message: String) = println("WARN: $message").also { warningsCount++ }

    override fun error(message: String) = println("ERROR: $message").also { errorsCount++ }
}