<?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>cab.ml</groupId>
		<artifactId>juno</artifactId>
		<version>0.1.0</version>
	</parent>

	<artifactId>api</artifactId>
	<name>api</name>
	<description>
		Client-facing OpenAPI 3.0 REST spec + generated Java code.
		Internal node-to-node gRPC definitions (inference.proto).
		All other modules depend on this one for shared contracts.
	</description>

	<properties>
		<!-- OpenAPI generator version — managed here, referenced in plugin -->
		<openapi-generator.version>7.5.0</openapi-generator.version>

		<!-- Generated sources output directory -->
		<openapi.generated.sources>
			${project.build.directory}/generated-sources/openapi</openapi.generated.sources>

		<!-- Package names for generated code -->
		<openapi.model.package>cab.ml.juno.api.model</openapi.model.package>
		<openapi.api.package>cab.ml.juno.api</openapi.api.package>
	</properties>

	<dependencies>

		<!-- gRPC — for internal proto-generated classes -->
		<dependency>
			<groupId>io.grpc</groupId>
			<artifactId>grpc-netty-shaded</artifactId>
		</dependency>
		<dependency>
			<groupId>io.grpc</groupId>
			<artifactId>grpc-protobuf</artifactId>
		</dependency>
		<dependency>
			<groupId>io.grpc</groupId>
			<artifactId>grpc-stub</artifactId>
		</dependency>
		<dependency>
			<groupId>com.google.protobuf</groupId>
			<artifactId>protobuf-java</artifactId>
		</dependency>
		<!-- jakarta.annotation — @Generated used in generated models -->
		<dependency>
			<groupId>jakarta.annotation</groupId>
			<artifactId>jakarta.annotation-api</artifactId>
			<version>2.1.1</version>
		</dependency>
		<!-- swagger-annotations — @ApiModel @ApiModelProperty -->
		<dependency>
			<groupId>io.swagger</groupId>
			<artifactId>swagger-annotations</artifactId>
			<version>1.6.14</version>
		</dependency>
		<dependency>
			<groupId>jakarta.ws.rs</groupId>
			<artifactId>jakarta.ws.rs-api</artifactId>
			<version>3.1.0</version>
		</dependency>
		<!-- Validation annotations used in generated models -->
		<dependency>
			<groupId>jakarta.validation</groupId>
			<artifactId>jakarta.validation-api</artifactId>
			<version>3.0.2</version>
		</dependency>

		<!-- Hibernate Validator — required by openapi-generator bean validation -->
		<dependency>
			<groupId>org.hibernate.validator</groupId>
			<artifactId>hibernate-validator</artifactId>
			<version>8.0.1.Final</version>
		</dependency>
		<!-- Jackson — JSON serialization for generated models -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.17.1</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.datatype</groupId>
			<artifactId>jackson-datatype-jsr310</artifactId>
			<version>2.17.1</version>
		</dependency>
		<!-- Needed for gRPC generated code -->
		<dependency>
			<groupId>javax.annotation</groupId>
			<artifactId>javax.annotation-api</artifactId>
			<version>1.3.2</version>
		</dependency>

	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.openapitools</groupId>
				<artifactId>openapi-generator-maven-plugin</artifactId>
				<version>${openapi-generator.version}</version>
				<executions>
					<execution>
						<id>generate-openapi</id>
						<phase>generate-sources</phase>
						<goals>
							<goal>generate</goal>
						</goals>
						<configuration>
							<inputSpec>
								${project.basedir}/src/main/resources/openapi.yaml
							</inputSpec>
							<generatorName>jaxrs-spec</generatorName>
							<output>
								${project.build.directory}/generated-sources/openapi
							</output>
							<apiPackage>${openapi.api.package}</apiPackage>
							<modelPackage>${openapi.model.package}</modelPackage>
							<invokerPackage>cab.ml.juno.api.invoker</invokerPackage>
							<generateApis>true</generateApis>
							<generateModels>true</generateModels>
							<generateSupportingFiles>false</generateSupportingFiles>
							<configOptions>
								<interfaceOnly>true</interfaceOnly>
								<useJakartaEe>true</useJakartaEe>
								<useBeanValidation>true</useBeanValidation>
								<dateLibrary>java8</dateLibrary>
								<serializableModel>true</serializableModel>
							</configOptions>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.xolstice.maven.plugins</groupId>
				<artifactId>protobuf-maven-plugin</artifactId>
				<version>0.6.1</version>
				<configuration>
					<protocArtifact>
						com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}
					</protocArtifact>
					<pluginId>grpc-java</pluginId>
					<pluginArtifact>
						io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}
					</pluginArtifact>
				</configuration>
				<executions>
					<execution>
						<goals>
							<goal>compile</goal>
							<goal>compile-custom</goal>
						</goals>
					</execution>
				</executions>
			</plugin>

			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>build-helper-maven-plugin</artifactId>
				<version>3.6.0</version>
				<executions>
					<execution>
						<id>add-generated</id>
						<phase>generate-sources</phase>
						<goals>
							<goal>add-source</goal>
						</goals>
						<configuration>
							<sources>
								<source>
									${project.build.directory}/generated-sources/openapi/src/gen/java
								</source>
								<source>
									${project.build.directory}/generated-sources/protobuf/java
								</source>
								<source>
									${project.build.directory}/generated-sources/protobuf/grpc-java
								</source>
							</sources>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>kr.motd.maven</groupId>
				<artifactId>os-maven-plugin</artifactId>
				<version>1.7.1</version>
				<executions>
					<execution>
						<goals>
							<goal>detect</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
			<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>
		</plugins>
	</build>

</project>