ProjectDetector.kt

package com.depanalyzer.parser

import java.io.File
import java.nio.file.Path

class ProjectDetector {
    fun detect(directory: Path): ProjectType {
        val dirFile = directory.toFile()
        if (!dirFile.exists() || !dirFile.isDirectory) {
            throw IllegalArgumentException("The path provided is not a valid directory: $directory")
        }

        val gradleKotlinFiles = listOf("build.gradle.kts", "settings.gradle.kts")
        if (gradleKotlinFiles.any { File(dirFile, it).exists() }) {
            return ProjectType.GRADLE_KOTLIN
        }

        val gradleGroovyFiles = listOf("build.gradle", "settings.gradle")
        if (gradleGroovyFiles.any { File(dirFile, it).exists() }) {
            return ProjectType.GRADLE_GROOVY
        }

        if (File(dirFile, "pom.xml").exists()) {
            return ProjectType.MAVEN
        }

        if (File(dirFile, "package.json").exists()) {
            return ProjectType.NPM
        }

        if (File(dirFile, "pyproject.toml").exists() || File(dirFile, "poetry.lock").exists()) {
            return ProjectType.PYTHON_POETRY
        }

        if (File(dirFile, "requirements.txt").exists()) {
            return ProjectType.PYTHON_REQUIREMENTS
        }

        throw IllegalStateException(
            "No known build files (pom.xml, build.gradle, build.gradle.kts, package.json, pyproject.toml, requirements.txt) found in $directory"
        )
    }
}