EntryPoint.kt

package com.sebastmar.module.report

import com.sebastmar.module.report.configuration.ConfigurationBuilder
import com.sebastmar.module.report.internal.Configuration
import com.sebastmar.module.report.internal.di.koin.getReport
import com.sebastmar.module.report.internal.host.HostType
import systems.danger.kotlin.models.danger.DangerDSL

internal typealias BuilderBlock = (ConfigurationBuilder.() -> Unit)

/**
 * Generates a GitHub comment with a report of the modules that have been modified in a pull request.
 *
 * @receiver The [DangerDSL] instance, providing access to Danger's functionalities.
 * @param builder A lambda with [ConfigurationBuilder] receiver to configure report generation.
 *             Can be used to customize:
 *             - Report sections and headers
 *             - Module naming and filtering rules
 *             - Comment formatting options
 * @see ConfigurationBuilder
 */
public fun DangerDSL.githubModuleReport(
    builder: BuilderBlock = {},
) {
    getReport(HostType.Github, builder.buildConfiguration())
        .write()
}

private fun BuilderBlock.buildConfiguration(): Configuration {
    return ConfigurationBuilder()
        .apply(this)
        .build()
}

// public fun githubActionModuleReport() { ... }
// public fun DangerDSL.gitlabModuleReport() { ... }
// public fun DangerDSL.bitbucketModuleReport() { ... }