package dev.rnett.gradle.mcp.dependencies

/**
 * Options for dependency requests.
 *
 * @property configuration The name of the configuration to get dependencies for (e.g. "implementation"). If null, all configurations are included.
 * @property sourceSet The name of the source set to get dependencies for (e.g. "main"). If null, all source sets are included.
 * @property dependency Full-string regex over canonical dependency coordinates (`group:name:version` or `group:name:version:variant`; unresolved dependencies use `group:name`; blank strings are treated as absent).
 * @property checkUpdates Whether to check for dependency updates.
 * @property versionFilter Regex filter for considered update versions.
 * @property stableOnly Whether to only include stable versions when checking for updates.
 * @property onlyDirect Whether to only include direct dependencies in the report.
 * @property includeConsumers Whether to compute and attach direct reverse consumer edges to every dependency node. Implies full-graph processing (as if `onlyDirect=false`). Defaults to false.
 * @property downloadSources Whether to download and include source artifacts.
 * @property excludeBuildscript Whether to exclude buildscript dependencies from the report. Defaults to true.
 * @property fresh Whether to force a fresh dependency resolution.
 * @property includeInternal Whether to include internal configurations (e.g. KMP metadata) in the report. Defaults to false.
 */
data class DependencyRequestOptions(
    val configuration: String? = null,
    val sourceSet: String? = null,
    val dependency: String? = null,
    val checkUpdates: Boolean = false,
    val versionFilter: String? = null,
    val stableOnly: Boolean = false,
    val onlyDirect: Boolean = false,
    val includeConsumers: Boolean = false,
    val downloadSources: Boolean = false,
    val excludeBuildscript: Boolean = true,
    val fresh: Boolean = false,
    val includeInternal: Boolean = false
)
