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

    <parent>
        <groupId>org.a2aproject.sdk</groupId>
        <artifactId>a2a-java-sdk-parent</artifactId>
        <version>1.0.0.Final</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>

    <artifactId>a2a-java-sdk-bom</artifactId>
    <packaging>pom</packaging>

    <name>A2A Java SDK - BOM</name>
    <description>Bill of Materials (BOM) for A2A Java SDK core modules and dependencies</description>

    <dependencyManagement>
        <dependencies>
            <!-- A2A SDK Core Modules -->

            <!-- Spec modules -->
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-spec</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-spec-grpc</artifactId>
                <version>${project.version}</version>
            </dependency>

            <!-- Common modules -->
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-common</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-jsonrpc-common</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-http-client</artifactId>
                <version>${project.version}</version>
            </dependency>

            <!-- Server modules -->
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-server-common</artifactId>
                <version>${project.version}</version>
            </dependency>

            <!-- Integration modules -->
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-microprofile-config</artifactId>
                <version>${project.version}</version>
            </dependency>

            <!-- Client modules -->
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-client</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-client-transport-spi</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-client-transport-jsonrpc</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-client-transport-grpc</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-client-transport-rest</artifactId>
                <version>${project.version}</version>
            </dependency>

            <!-- Transport modules -->
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-transport-grpc</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-transport-jsonrpc</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-transport-rest</artifactId>
                <version>${project.version}</version>
            </dependency>

            <!-- Compat 0.3 Spec modules -->
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-compat-0.3-spec</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-compat-0.3-spec-grpc</artifactId>
                <version>${project.version}</version>
            </dependency>

            <!-- Compat 0.3 Client modules -->
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-compat-0.3-client</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-compat-0.3-client-transport-spi</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-compat-0.3-client-transport-jsonrpc</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-compat-0.3-client-transport-grpc</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-compat-0.3-client-transport-rest</artifactId>
                <version>${project.version}</version>
            </dependency>

            <!-- Compat 0.3 Transport modules -->
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-compat-0.3-transport-jsonrpc</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-compat-0.3-transport-grpc</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-compat-0.3-transport-rest</artifactId>
                <version>${project.version}</version>
            </dependency>

            <!-- Test utilities -->
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-test-utils-docker</artifactId>
                <version>${project.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-tests-server-common</artifactId>
                <version>${project.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-tests-server-common</artifactId>
                <type>test-jar</type>
                <scope>test</scope>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>a2a-java-sdk-server-common</artifactId>
                <type>test-jar</type>
                <scope>test</scope>
                <version>${project.version}</version>
            </dependency>

            <!-- Third-party BOMs (import scope) -->
            <dependency>
                <groupId>io.grpc</groupId>
                <artifactId>grpc-bom</artifactId>
                <version>${grpc.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-bom</artifactId>
                <version>${slf4j.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- Core dependencies -->
            <dependency>
                <groupId>com.google.protobuf</groupId>
                <artifactId>protobuf-java</artifactId>
                <version>${protobuf-java.version}</version>
            </dependency>
            <dependency>
                <groupId>io.smallrye.reactive</groupId>
                <artifactId>mutiny-zero</artifactId>
                <version>${mutiny-zero.version}</version>
            </dependency>

            <!-- Jakarta APIs -->
            <dependency>
                <groupId>jakarta.enterprise</groupId>
                <artifactId>jakarta.enterprise.cdi-api</artifactId>
                <version>${jakarta.enterprise.cdi-api.version}</version>
            </dependency>
            <dependency>
                <groupId>jakarta.inject</groupId>
                <artifactId>jakarta.inject-api</artifactId>
                <version>${jakarta.inject.jakarta.inject-api.version}</version>
            </dependency>
            <dependency>
                <groupId>jakarta.json</groupId>
                <artifactId>jakarta.json-api</artifactId>
                <version>${jakarta.json-api.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>jakarta.ws.rs</groupId>
                <artifactId>jakarta.ws.rs-api</artifactId>
                <version>${jakarta.ws.rs-api.version}</version>
                <scope>provided</scope>
            </dependency>

            <!-- JSpecify annotations -->
            <dependency>
                <groupId>org.jspecify</groupId>
                <artifactId>jspecify</artifactId>
                <version>1.0.0</version>
                <scope>provided</scope>
            </dependency>

            <!-- Test dependencies -->
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter-api</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>io.rest-assured</groupId>
                <artifactId>rest-assured</artifactId>
                <version>${rest-assured.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.mockito</groupId>
                <artifactId>mockito-core</artifactId>
                <version>${mockito-core.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.mock-server</groupId>
                <artifactId>mockserver-netty</artifactId>
                <version>${mockserver.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>${logback.version}</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-invoker-plugin</artifactId>
                <version>3.10.1</version>
                <configuration>
                    <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
                    <localRepositoryPath>${project.build.directory}/local-repo</localRepositoryPath>
                    <settingsFile>src/it/settings.xml</settingsFile>
                    <goals>
                        <goal>clean</goal>
                        <goal>verify</goal>
                    </goals>
                    <streamLogs>false</streamLogs>
                    <streamLogsOnFailures>true</streamLogsOnFailures>
                    <invokerPropertiesFile>invoker.properties</invokerPropertiesFile>
                    <!-- Install test-utils module before running integration tests -->
                    <extraArtifacts>
                        <extraArtifact>org.a2aproject.sdk:a2a-java-bom-test-utils:${project.version}:jar</extraArtifact>
                    </extraArtifacts>
                </configuration>
                <executions>
                    <execution>
                        <id>integration-test</id>
                        <goals>
                            <goal>install</goal>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>
