<?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>
    <parent>
        <groupId>org.pragmatica-lite.aether</groupId>
        <artifactId>aether</artifactId>
        <version>1.0.0-rc1</version>
    </parent>

    <artifactId>node</artifactId>
    <name>Aether Node</name>

    <properties>
        <maven.build.timestamp.format>yyyy-MM-dd'T'HH:mm:ss'Z'</maven.build.timestamp.format>
        <build.timestamp>${maven.build.timestamp}</build.timestamp>
    </properties>

    <dependencies>
        <!-- Internal -->
        <dependency>
            <groupId>org.pragmatica-lite</groupId>
            <artifactId>core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.pragmatica-lite</groupId>
            <artifactId>dht</artifactId>
        </dependency>
        <dependency>
            <groupId>org.pragmatica-lite</groupId>
            <artifactId>utility</artifactId>
        </dependency>
        <dependency>
            <groupId>org.pragmatica-lite</groupId>
            <artifactId>statemachine</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.pragmatica-lite</groupId>
            <artifactId>statemachine</artifactId>
            <version>${project.version}</version>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.pragmatica-lite</groupId>
            <artifactId>http-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.pragmatica-lite</groupId>
            <artifactId>cluster</artifactId>
        </dependency>

        <!-- SWIM failure detection for core-to-core health -->
        <dependency>
            <groupId>org.pragmatica-lite</groupId>
            <artifactId>swim</artifactId>
        </dependency>

        <dependency>
            <groupId>org.pragmatica-lite</groupId>
            <artifactId>http-client</artifactId>
        </dependency>

        <dependency>
            <groupId>org.pragmatica-lite.aether</groupId>
            <artifactId>slice-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.pragmatica-lite</groupId>
            <artifactId>serialization-codec-processor</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.pragmatica-lite.aether</groupId>
            <artifactId>aether-stream</artifactId>
            <version>${project.version}</version>
        </dependency>

        <dependency>
            <groupId>org.pragmatica-lite.aether</groupId>
            <artifactId>http-handler-api</artifactId>
            <version>${project.version}</version>
        </dependency>

        <dependency>
            <groupId>org.pragmatica-lite.aether</groupId>
            <artifactId>http-routing-adapter</artifactId>
            <version>${project.version}</version>
        </dependency>

        <dependency>
            <groupId>org.pragmatica-lite</groupId>
            <artifactId>http-routing</artifactId>
        </dependency>
        <dependency>
            <groupId>org.pragmatica-lite</groupId>
            <artifactId>jackson</artifactId>
        </dependency>

        <dependency>
            <groupId>org.pragmatica-lite.aether</groupId>
            <artifactId>resource-api</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.pragmatica-lite.aether</groupId>
            <artifactId>resource-db-async</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.pragmatica-lite.aether</groupId>
            <artifactId>resource-db-jdbc</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
            <version>7.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.pragmatica-lite.aether</groupId>
            <artifactId>environment-integration</artifactId>
        </dependency>
        <dependency>
            <groupId>org.pragmatica-lite.aether</groupId>
            <artifactId>environment-docker</artifactId>
            <version>${project.version}</version>
        </dependency>
        <!--
            Cloud-provider environment integrations are bundled into the runtime image so
            any deployment can auto-heal regardless of which provider bootstrapped it. Each
            module ships a META-INF/services entry for `EnvironmentIntegrationFactory`; the
            shaded jar's `ServicesResourceTransformer` merges them at package time, and
            `Main.resolveEnvironment` selects the right one at boot via `[cloud] provider =
            "..."`. Without these dependencies the ServiceLoader sees only the Docker
            factory at runtime, `lifecycleManager.isCloudManaged()` returns false on every
            cloud cluster, and CTM silently falls into the "no ComputeProvider" branch —
            CTM will never auto-provision a replacement for a failed core node, breaking
            12-network suite-2 (`No NODE_JOINED for replacement`) on every cloud target.
        -->
        <dependency>
            <groupId>org.pragmatica-lite.aether</groupId>
            <artifactId>environment-hetzner</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.pragmatica-lite.aether</groupId>
            <artifactId>environment-aws</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.pragmatica-lite.aether</groupId>
            <artifactId>environment-gcp</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.pragmatica-lite.aether</groupId>
            <artifactId>environment-azure</artifactId>
            <version>${project.version}</version>
        </dependency>

        <dependency>
            <groupId>org.pragmatica-lite.aether</groupId>
            <artifactId>slice</artifactId>
        </dependency>

        <dependency>
            <groupId>org.pragmatica-lite.aether</groupId>
            <artifactId>artifact-repo</artifactId>
        </dependency>

        <dependency>
            <groupId>org.pragmatica-lite.aether</groupId>
            <artifactId>aether-storage</artifactId>
            <version>${project.version}</version>
        </dependency>

        <dependency>
            <groupId>org.pragmatica-lite.aether</groupId>
            <artifactId>aether-config</artifactId>
            <version>${project.version}</version>
        </dependency>

        <dependency>
            <groupId>org.pragmatica-lite.aether</groupId>
            <artifactId>aether-ttm</artifactId>
            <version>${project.version}</version>
        </dependency>

        <dependency>
            <groupId>org.pragmatica-lite.aether</groupId>
            <artifactId>dashboard</artifactId>
            <version>${project.version}</version>
        </dependency>

        <!-- Split node modules -->
        <dependency>
            <groupId>org.pragmatica-lite.aether</groupId>
            <artifactId>aether-dht</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.pragmatica-lite.aether</groupId>
            <artifactId>aether-invoke</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.pragmatica-lite.aether</groupId>
            <artifactId>aether-management-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.pragmatica-lite.aether</groupId>
            <artifactId>aether-metrics</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.pragmatica-lite.aether</groupId>
            <artifactId>aether-deployment</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.pragmatica-lite.aether</groupId>
            <artifactId>aether-control</artifactId>
            <version>${project.version}</version>
        </dependency>
        <!-- worker module removed: sources moved to node and aether-metrics -->

        <!-- Observability -->
        <dependency>
            <groupId>org.pragmatica-lite</groupId>
            <artifactId>micrometer</artifactId>
        </dependency>
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-core</artifactId>
        </dependency>
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-registry-prometheus</artifactId>
        </dependency>

        <!-- Logging -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>

        <!-- Network -->
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
        </dependency>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-codec-http3</artifactId>
        </dependency>

        <!-- Testing -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-junit-jupiter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.awaitility</groupId>
            <artifactId>awaitility</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j2-impl</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-layout-template-json</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>build-info.properties</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>false</filtering>
                <excludes>
                    <exclude>build-info.properties</exclude>
                </excludes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <compilerArgs combine.children="append">
                        <arg>-Acodec.registry.suffix=Node</arg>
                    </compilerArgs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.6.0</version>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.logging.log4j</groupId>
                        <artifactId>log4j-transform-maven-shade-plugin-extensions</artifactId>
                        <version>0.2.0</version>
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>org.pragmatica.aether.Main</mainClass>
                                    <manifestEntries>
                                        <Implementation-Version>${project.version}</Implementation-Version>
                                        <Implementation-Build-Date>${maven.build.timestamp}</Implementation-Build-Date>
                                    </manifestEntries>
                                </transformer>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                                <transformer implementation="org.apache.logging.log4j.maven.plugins.shade.transformer.Log4j2PluginCacheFileTransformer"/>
                            </transformers>
                            <filters>
                                <filter>
                                    <artifact>*:*</artifact>
                                    <excludes>
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                    </excludes>
                                </filter>
                                <filter>
                                    <artifact>com.microsoft.onnxruntime:onnxruntime</artifact>
                                    <excludes>
                                        <exclude>ai/onnxruntime/native/osx-*/**/*.dSYM/**</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                            <createDependencyReducedPom>false</createDependencyReducedPom>
                            <finalName>aether-node</finalName>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>with-ttm</id>
            <dependencies>
                <dependency>
                    <groupId>org.pragmatica-lite.aether</groupId>
                    <artifactId>aether-ttm-onnx</artifactId>
                    <version>${project.version}</version>
                </dependency>
            </dependencies>
        </profile>
    </profiles>
</project>