<?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>

    <artifactId>api</artifactId>
    <name>${project.artifactId}</name>
    <description>OpenApi specifications for the platform Engine Api</description>
    <url>https://documentation.noumenadigital.com/</url>

    <licenses>
        <license>
            <name>NPL Maven Plugin License</name>
            <url>https://noumenadigital.com/npl-maven-plugin-license/</url>
        </license>
    </licenses>

    <developers>
        <developer>
            <organization>Noumena Digital</organization>
            <organizationUrl>https://noumenadigital.com/</organizationUrl>
        </developer>
    </developers>

    <scm>
        <url>https://github.com/NoumenaDigital/platform</url>
    </scm>

    <parent>
        <groupId>com.noumenadigital.platform</groupId>
        <artifactId>parent-pom</artifactId>
        <version>2025.2.7</version>
        <relativePath>../parent-pom</relativePath>
    </parent>

    <properties>
        <sonar.skip>true</sonar.skip>
        <skipDetekt>true</skipDetekt>
    </properties>

    <dependencies>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>api-postprocessor</artifactId>
            <version>${project.version}</version>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.openapitools</groupId>
                <artifactId>openapi-generator-maven-plugin</artifactId>
                <configuration>
                    <generatorName>spring</generatorName>
                    <apiPackage>com.noumenadigital.platform.api</apiPackage>
                    <modelPackage>com.noumenadigital.platform.api.models</modelPackage>
                    <generateApiDocumentation>false</generateApiDocumentation>
                    <generateApiTests>false</generateApiTests>
                    <generateModelDocumentation>false</generateModelDocumentation>
                    <generateModelTests>false</generateModelTests>
                    <generateSupportingFiles>false</generateSupportingFiles>
                    <typeMappings>
                        <typeMapping>OffsetDateTime=java.time.ZonedDateTime</typeMapping>
                    </typeMappings>
                    <configOptions>
                        <oas3>true</oas3>
                        <!-- Do not use Swagger annotations on the generated code -->
                        <annotationLibrary>none</annotationLibrary>
                        <documentationProvider>none</documentationProvider>
                        <!-- Do not generate implementations. -->
                        <interfaceOnly>true</interfaceOnly>
                        <!-- Do not generate default implementations. -->
                        <skipDefaultInterface>true</skipDefaultInterface>
                        <!-- Use Java8 DateTime. -->
                        <dateLibrary>java8</dateLibrary>
                        <!-- Saner naming using tags. -->
                        <useTags>true</useTags>
                        <!-- Do not show the @Generator annotation. -->
                        <hideGenerationTimestamp>true</hideGenerationTimestamp>
                        <openApiNullable>false</openApiNullable>
                        <generatedConstructorWithRequiredArgs>false</generatedConstructorWithRequiredArgs>
                        <useJakartaEe>true</useJakartaEe>
                    </configOptions>
                </configuration>
                <executions>
                    <execution>
                        <id>generate-engine</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <inputSpec>${project.basedir}/src/main/resources/engine.yml</inputSpec>
                            <configOptions>
                                <!-- Wrap everything in CompletableFuture. -->
                                <async>true</async>
                            </configOptions>
                        </configuration>
                    </execution>
                    <execution>
                        <id>generate-multinode</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <inputSpec>${project.basedir}/src/main/resources/engine-multinode-token.yml</inputSpec>
                            <configOptions>
                                <!-- Wrap everything in CompletableFuture. -->
                                <async>true</async>
                            </configOptions>
                        </configuration>
                    </execution>
                    <execution>
                        <id>generate-message</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <inputSpec>${project.basedir}/src/main/resources/engine-multinode-message.yml</inputSpec>
                            <configOptions>
                                <!-- Wrap everything in CompletableFuture. -->
                                <async>true</async>
                            </configOptions>
                        </configuration>
                    </execution>
                    <execution>
                        <id>generate-engine-admin</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <inputSpec>${project.basedir}/src/main/resources/engine-admin.yml</inputSpec>
                            <configOptions>
                                <!-- Wrap everything in CompletableFuture. -->
                                <async>true</async>
                            </configOptions>
                        </configuration>
                    </execution>
                    <execution>
                        <id>generate-streams</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <inputSpec>${project.basedir}/src/main/resources/engine-streams.yml</inputSpec>
                            <configOptions>
                                <!-- Wrap everything in Flux. -->
                                <responseWrapper>reactor.core.publisher.Flux</responseWrapper>
                                <reactive>true</reactive>
                            </configOptions>
                        </configuration>
                    </execution>
                    <execution>
                        <id>generate-streams-admin</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <inputSpec>${project.basedir}/src/main/resources/engine-streams-admin.yml</inputSpec>
                            <configOptions>
                                <!-- Wrap everything in Flux. -->
                                <responseWrapper>reactor.core.publisher.Flux</responseWrapper>
                                <reactive>true</reactive>
                            </configOptions>
                        </configuration>
                    </execution>
                    <execution>
                        <id>generate-debug</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <inputSpec>${project.basedir}/src/main/resources/debug.yml</inputSpec>
                        </configuration>
                    </execution>
                    <execution>
                        <id>generate-debug-streams</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <inputSpec>${project.basedir}/src/main/resources/debug-streams.yml</inputSpec>
                            <configOptions>
                                <!-- Wrap everything in Flux. -->
                                <responseWrapper>reactor.core.publisher.Flux</responseWrapper>
                                <reactive>true</reactive>
                            </configOptions>
                        </configuration>
                    </execution>
                    <execution>
                        <id>generate-management</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <inputSpec>${project.basedir}/src/main/resources/engine-management.yml</inputSpec>
                            <configOptions>
                                <!-- Wrap everything in CompletableFuture. -->
                                <async>true</async>
                            </configOptions>
                        </configuration>
                    </execution>
                    <execution>
                        <id>generate-admin-history</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <inputSpec>${project.basedir}/src/main/resources/history-admin.yml</inputSpec>
                            <configOptions>
                                <!-- Wrap everything in CompletableFuture. -->
                                <async>true</async>
                            </configOptions>
                        </configuration>
                    </execution>
                    <execution>
                        <id>generate-admin-history-streams</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <inputSpec>${project.basedir}/src/main/resources/history-streams-admin.yml</inputSpec>
                            <configOptions>
                                <!-- Wrap everything in Flux. -->
                                <responseWrapper>reactor.core.publisher.Flux</responseWrapper>
                                <reactive>true</reactive>
                            </configOptions>
                        </configuration>
                    </execution>
                    <execution>
                        <id>generate-management-history</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <inputSpec>${project.basedir}/src/main/resources/history-management.yml</inputSpec>
                            <configOptions>
                                <!-- Wrap everything in CompletableFuture. -->
                                <async>true</async>
                            </configOptions>
                        </configuration>
                    </execution>
                    <execution>
                        <id>generate-oidc</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <inputSpec>${project.basedir}/src/main/resources/engine-oidc.yml</inputSpec>
                            <configOptions>
                                <!-- Wrap everything in CompletableFuture. -->
                                <async>false</async>
                            </configOptions>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>post-process-openapi-sources</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>java</goal>
                        </goals>
                        <configuration>
                            <mainClass>com.noumenadigital.platform.api.postprocessor.PostProcessorKt</mainClass>
                            <commandlineArgs>${project.build.directory}/generated-sources/openapi/src/main/java</commandlineArgs>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!-- Create a separate JAR. -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <executions>
                    <execution>
                        <id>pack-api-docs</id>
                        <phase>package</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                        <configuration>
                            <classifier>docs</classifier>
                            <classesDirectory>${project.build.directory}/docs</classesDirectory>
                            <includes>
                                <include>**/*</include>
                            </includes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
