<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>ai.driftkit</groupId>
    <artifactId>driftkit-parent</artifactId>
    <version>0.5.2</version>
    <packaging>pom</packaging>

    <name>DriftKit Parent</name>
    <description>Parent POM for DriftKit Framework - AI ETL and Workflow Processing Framework</description>
    <url>https://github.com/driftkit-ai/driftkit</url>
    
    <licenses>
        <license>
            <name>MIT License</name>
            <url>http://www.opensource.org/licenses/mit-license.php</url>
            <distribution>repo</distribution>
        </license>
    </licenses>
    
    <developers>
        <developer>
            <name>DriftKit AI Team</name>
            <email>alexey.doroshev@gmail.com</email>
            <organization>DriftKit AI</organization>
            <organizationUrl>https://driftkit.ai</organizationUrl>
        </developer>
    </developers>
    
    <scm>
        <url>https://github.com/driftkit-ai/driftkit</url>
        <connection>scm:git:git://github.com/driftkit-ai/driftkit.git</connection>
        <developerConnection>scm:git:ssh://github.com:driftkit-ai/driftkit.git</developerConnection>
    </scm>

    <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        
        <!-- Spring Boot -->
        <spring-boot.version>3.3.1</spring-boot.version>
        <spring.version>6.1.5</spring.version>
        
        <!-- AI/ML Libraries -->
        <langchain.version>0.35.0</langchain.version>
        <djl.version>0.32.0</djl.version>
        
        <!-- OpenAI -->
        <openai.ai.token>${OPENAI_API_KEY}</openai.ai.token>
        <openai.ai.baseurl>https://api.openai.com</openai.ai.baseurl>
        <openai.ai.baseurl.v1>https://api.openai.com/v1</openai.ai.baseurl.v1>
        
        <!-- Jackson -->
        <jackson.version>2.17.2</jackson.version>
        
        <!-- Apache Commons -->
        <commons-lang3.version>3.14.0</commons-lang3.version>
        <commons-jexl.version>2.1.1</commons-jexl.version>
        <commons-collections4.version>4.4</commons-collections4.version>
        
        <!-- Testing -->
        <junit.version>4.13.2</junit.version>
        <junit5.version>5.10.0</junit5.version>
        <mockito.version>5.3.1</mockito.version>
        
        <!-- Logging -->
        <slf4j.version>2.0.8</slf4j.version>
        
        <!-- Other -->
        <lombok.version>1.18.34</lombok.version>
        <feign.version>11.10</feign.version>
        <okhttp.version>4.11.0</okhttp.version>
        <json.version>20211205</json.version>
        <snakeyaml.version>2.0</snakeyaml.version>
        <jetbrains.annotations.version>24.0.1</jetbrains.annotations.version>
        <swagger.annotations.version>2.2.15</swagger.annotations.version>
        <spring.cloud.version>2023.0.2</spring.cloud.version>
        
        <!-- Plugin versions -->
        <maven-compiler-plugin.version>3.11.0</maven-compiler-plugin.version>
        <maven-source-plugin.version>3.3.0</maven-source-plugin.version>
        <maven-javadoc-plugin.version>3.6.3</maven-javadoc-plugin.version>
        <maven-gpg-plugin.version>3.1.0</maven-gpg-plugin.version>
        <central-publishing-plugin.version>0.8.0</central-publishing-plugin.version>
        
        <!-- Audio Processing Libraries -->
        <assemblyai.version>1.0.1</assemblyai.version>
        <mp3spi.version>1.9.5.4</mp3spi.version>
        <tritonus.version>0.3.7.4</tritonus.version>
        <jave.version>3.3.1</jave.version>
    </properties>

    <modules>
        <module>driftkit-chat-assistant-framework</module>
        <module>driftkit-common</module>
        <module>driftkit-clients</module>
        <module>driftkit-embedding</module>
        <module>driftkit-vector</module>
        <module>driftkit-workflows</module>
        <module>driftkit-context-engineering</module>
        <module>driftkit-workflows-examples</module>
        <module>driftkit-audio</module>
    </modules>

    <dependencyManagement>
        <dependencies>
            <!-- Spring Boot BOM -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            
            <!-- Spring Cloud BOM -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- DriftKit Internal Dependencies -->
            <dependency>
                <groupId>ai.driftkit</groupId>
                <artifactId>driftkit-common</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>ai.driftkit</groupId>
                <artifactId>driftkit-clients-core</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>ai.driftkit</groupId>
                <artifactId>driftkit-embedding-core</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>ai.driftkit</groupId>
                <artifactId>driftkit-vector-core</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>ai.driftkit</groupId>
                <artifactId>driftkit-workflows-core</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>ai.driftkit</groupId>
                <artifactId>driftkit-context-engineering-core</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>ai.driftkit</groupId>
                <artifactId>driftkit-workflows-examples-core</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>ai.driftkit</groupId>
                <artifactId>driftkit-clients-openai</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>ai.driftkit</groupId>
                <artifactId>driftkit-audio-core</artifactId>
                <version>${project.version}</version>
            </dependency>

            <!-- Lombok -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
                <scope>provided</scope>
            </dependency>

            <!-- Jackson -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${jackson.version}</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.datatype</groupId>
                <artifactId>jackson-datatype-jsr310</artifactId>
                <version>${jackson.version}</version>
            </dependency>

            <!-- Apache Commons -->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>${commons-lang3.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-jexl</artifactId>
                <version>${commons-jexl.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-collections4</artifactId>
                <version>${commons-collections4.version}</version>
            </dependency>

            <!-- SLF4J -->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            
            <!-- JetBrains Annotations -->
            <dependency>
                <groupId>org.jetbrains</groupId>
                <artifactId>annotations</artifactId>
                <version>${jetbrains.annotations.version}</version>
            </dependency>
            
            <!-- Swagger Annotations -->
            <dependency>
                <groupId>io.swagger.core.v3</groupId>
                <artifactId>swagger-annotations</artifactId>
                <version>${swagger.annotations.version}</version>
            </dependency>

            <!-- Feign -->
            <dependency>
                <groupId>io.github.openfeign</groupId>
                <artifactId>feign-core</artifactId>
                <version>${feign.version}</version>
            </dependency>
            <dependency>
                <groupId>io.github.openfeign</groupId>
                <artifactId>feign-jackson</artifactId>
                <version>${feign.version}</version>
            </dependency>
            <dependency>
                <groupId>io.github.openfeign</groupId>
                <artifactId>feign-okhttp</artifactId>
                <version>${feign.version}</version>
            </dependency>
            <dependency>
                <groupId>io.github.openfeign</groupId>
                <artifactId>feign-slf4j</artifactId>
                <version>${feign.version}</version>
            </dependency>

            <!-- OkHttp -->
            <dependency>
                <groupId>com.squareup.okhttp3</groupId>
                <artifactId>okhttp</artifactId>
                <version>${okhttp.version}</version>
            </dependency>

            <!-- JSON -->
            <dependency>
                <groupId>org.json</groupId>
                <artifactId>json</artifactId>
                <version>${json.version}</version>
            </dependency>

            <!-- YAML -->
            <dependency>
                <groupId>org.yaml</groupId>
                <artifactId>snakeyaml</artifactId>
                <version>${snakeyaml.version}</version>
            </dependency>

            <!-- LangChain4j -->
            <dependency>
                <groupId>dev.langchain4j</groupId>
                <artifactId>langchain4j</artifactId>
                <version>${langchain.version}</version>
            </dependency>
            <dependency>
                <groupId>dev.langchain4j</groupId>
                <artifactId>langchain4j-embeddings</artifactId>
                <version>${langchain.version}</version>
            </dependency>
            <dependency>
                <groupId>dev.langchain4j</groupId>
                <artifactId>langchain4j-embeddings-all-minilm-l6-v2</artifactId>
                <version>${langchain.version}</version>
            </dependency>
            <dependency>
                <groupId>dev.langchain4j</groupId>
                <artifactId>langchain4j-embeddings-e5-small-v2</artifactId>
                <version>${langchain.version}</version>
            </dependency>
            <dependency>
                <groupId>dev.langchain4j</groupId>
                <artifactId>langchain4j-embeddings-e5-small-v2-q</artifactId>
                <version>${langchain.version}</version>
            </dependency>

            <!-- DJL -->
            <dependency>
                <groupId>ai.djl</groupId>
                <artifactId>api</artifactId>
                <version>${djl.version}</version>
            </dependency>
            <dependency>
                <groupId>ai.djl.huggingface</groupId>
                <artifactId>tokenizers</artifactId>
                <version>${djl.version}</version>
            </dependency>

            <!-- Audio Processing Libraries -->
            <dependency>
                <groupId>com.assemblyai</groupId>
                <artifactId>assemblyai-java</artifactId>
                <version>${assemblyai.version}</version>
            </dependency>
            <dependency>
                <groupId>com.googlecode.soundlibs</groupId>
                <artifactId>mp3spi</artifactId>
                <version>${mp3spi.version}</version>
            </dependency>
            <dependency>
                <groupId>com.googlecode.soundlibs</groupId>
                <artifactId>tritonus-share</artifactId>
                <version>${tritonus.version}</version>
            </dependency>
            <dependency>
                <groupId>ws.schild</groupId>
                <artifactId>jave-core</artifactId>
                <version>${jave.version}</version>
            </dependency>
            <dependency>
                <groupId>ws.schild</groupId>
                <artifactId>jave-nativebin-linux64</artifactId>
                <version>${jave.version}</version>
            </dependency>
            <dependency>
                <groupId>ws.schild</groupId>
                <artifactId>jave-nativebin-win64</artifactId>
                <version>${jave.version}</version>
            </dependency>
            <dependency>
                <groupId>ws.schild</groupId>
                <artifactId>jave-nativebin-osx64</artifactId>
                <version>${jave.version}</version>
            </dependency>

            <!-- Testing -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter</artifactId>
                <version>${junit5.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter-api</artifactId>
                <version>${junit5.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter-engine</artifactId>
                <version>${junit5.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.mockito</groupId>
                <artifactId>mockito-core</artifactId>
                <version>${mockito.version}</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>${maven-compiler-plugin.version}</version>
                    <configuration>
                        <source>21</source>
                        <target>21</target>
                        <encoding>UTF-8</encoding>
                        <compilerArgs>
                            <arg>-parameters</arg>
                        </compilerArgs>
                        <annotationProcessorPaths>
                            <path>
                                <groupId>org.projectlombok</groupId>
                                <artifactId>lombok</artifactId>
                                <version>${lombok.version}</version>
                            </path>
                        </annotationProcessorPaths>
                    </configuration>
                </plugin>
                
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>${spring-boot.version}</version>
                </plugin>
                
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>3.0.0</version>
                </plugin>
                
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-source-plugin</artifactId>
                    <version>${maven-source-plugin.version}</version>
                    <executions>
                        <execution>
                            <id>attach-sources</id>
                            <goals>
                                <goal>jar-no-fork</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <version>${maven-javadoc-plugin.version}</version>
                    <configuration>
                        <doclint>none</doclint>
                        <failOnError>false</failOnError>
                        <failOnWarnings>false</failOnWarnings>
                    </configuration>
                    <executions>
                        <execution>
                            <id>attach-javadocs</id>
                            <goals>
                                <goal>jar</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-gpg-plugin</artifactId>
                    <version>${maven-gpg-plugin.version}</version>
                    <executions>
                        <execution>
                            <id>sign-artifacts</id>
                            <phase>verify</phase>
                            <goals>
                                <goal>sign</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                
                <plugin>
                    <groupId>org.sonatype.central</groupId>
                    <artifactId>central-publishing-maven-plugin</artifactId>
                    <version>${central-publishing-plugin.version}</version>
                    <extensions>true</extensions>
                    <configuration>
                        <publishingServerId>central</publishingServerId>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
    
    <distributionManagement>
        <snapshotRepository>
            <id>central</id>
            <url>https://central.sonatype.com/</url>
        </snapshotRepository>
        <repository>
            <id>central</id>
            <url>https://central.sonatype.com/</url>
        </repository>
    </distributionManagement>
    
    <profiles>
        <profile>
            <id>release</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-gpg-plugin</artifactId>
                    </plugin>
                    <plugin>
                        <groupId>org.sonatype.central</groupId>
                        <artifactId>central-publishing-maven-plugin</artifactId>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>