<?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>com.metaobjects</groupId>
    <artifactId>metaobjects</artifactId>
    <version>7.4.2</version>
  </parent>

  <artifactId>metaobjects-codegen-kotlin</artifactId>
  <name>MetaObjects :: Codegen :: Kotlin</name>
  <description>Kotlin codegen target — emits @Serializable data classes, Exposed Tables, FR-004 payload classes, and a startup-validator stub via KotlinPoet.</description>

  <properties>
    <kotlin.version>2.0.21</kotlin.version>
    <maven.compiler.release>21</maven.compiler.release>
  </properties>

  <dependencies>
    <!-- production -->
    <dependency>
      <groupId>org.jetbrains.kotlin</groupId>
      <artifactId>kotlin-stdlib</artifactId>
      <version>${kotlin.version}</version>
    </dependency>
    <dependency>
      <groupId>com.metaobjects</groupId>
      <artifactId>metaobjects-codegen-base</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>com.metaobjects</groupId>
      <artifactId>metaobjects-metadata-ktx</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>com.squareup</groupId>
      <artifactId>kotlinpoet-jvm</artifactId>
      <version>1.18.1</version>
    </dependency>

    <!-- Shared JVM render engine. KotlinRenderHelperGenerator uses Verify/FilesystemProvider/
         PayloadField at BUILD time (the mustache↔VO drift gate) and emits Kotlin that calls
         Renderer/RenderRequest/EmailDocument at runtime — so render must be a COMPILE-scope
         dependency of the generator (mirrors codegen-spring's render dependency). The FR-010
         output-prompt conformance runner also drives these classes directly. Brings
         jackson-databind transitively for spec.json parsing. -->
    <dependency>
      <groupId>com.metaobjects</groupId>
      <artifactId>metaobjects-render</artifactId>
      <version>${project.version}</version>
    </dependency>
    <!-- spec.json parsing for the output-prompt-conformance runner (jackson is test-scoped in
         render, so it is not transitive — declare it directly). -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.jetbrains.kotlin</groupId>
      <artifactId>kotlin-test-junit5</artifactId>
      <version>${kotlin.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <version>5.10.2</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.metaobjects</groupId>
      <artifactId>metaobjects-metadata</artifactId>
      <version>${project.version}</version>
      <type>test-jar</type>
      <scope>test</scope>
    </dependency>
    <!-- Shared JVM runtime extract (MetaObjectExtractor, in the om module): the Kotlin
         verdict proof drives it directly, proving extract assembles a typed object graph
         when called from Kotlin. Kotlin adds no extract code — this is a verdict proof. -->
    <dependency>
      <groupId>com.metaobjects</groupId>
      <artifactId>metaobjects-om</artifactId>
      <version>${project.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.github.tschuchortdev</groupId>
      <artifactId>kotlin-compile-testing</artifactId>
      <version>1.6.0</version>
      <scope>test</scope>
    </dependency>
    <!-- validation-conformance runner (SP-C Unit 5): compile the generated entity data class
         and validate each corpus payload through a jakarta Validator. Hibernate Validator brings
         jakarta.validation-api transitively; expressly is the jakarta EL impl the constraint-message
         interpolator needs at runtime; jackson-module-kotlin binds each corpus payload JSON onto
         the generated Kotlin data class (Kotlin constructor binding). -->
    <dependency>
      <groupId>org.hibernate.validator</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>8.0.1.Final</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.glassfish.expressly</groupId>
      <artifactId>expressly</artifactId>
      <version>5.0.0</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.module</groupId>
      <artifactId>jackson-module-kotlin</artifactId>
      <version>2.18.1</version>
      <scope>test</scope>
    </dependency>
    <!-- Required at test scope so kotlin-compile-testing can resolve @Serializable on generated code -->
    <dependency>
      <groupId>org.jetbrains.kotlinx</groupId>
      <artifactId>kotlinx-serialization-core-jvm</artifactId>
      <version>1.7.3</version>
      <scope>test</scope>
    </dependency>
    <!-- Required at test scope so the FR-010 compile harness can resolve kotlinx.serialization.json.Json
         (the JSON codec artifact; separate from the core annotations jar) -->
    <dependency>
      <groupId>org.jetbrains.kotlinx</groupId>
      <artifactId>kotlinx-serialization-json-jvm</artifactId>
      <version>1.7.3</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <sourceDirectory>src/main/kotlin</sourceDirectory>
    <testSourceDirectory>src/test/kotlin</testSourceDirectory>
    <plugins>
      <plugin>
        <groupId>org.jetbrains.kotlin</groupId>
        <artifactId>kotlin-maven-plugin</artifactId>
        <version>${kotlin.version}</version>
        <executions>
          <execution>
            <id>compile</id>
            <phase>compile</phase>
            <goals><goal>compile</goal></goals>
          </execution>
          <execution>
            <id>test-compile</id>
            <phase>test-compile</phase>
            <goals><goal>test-compile</goal></goals>
          </execution>
        </executions>
        <configuration>
          <jvmTarget>21</jvmTarget>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>${surefire.plugin.version}</version>
      </plugin>
      <plugin>
        <groupId>org.jetbrains.dokka</groupId>
        <artifactId>dokka-maven-plugin</artifactId>
        <version>1.9.20</version>
        <executions>
          <execution>
            <id>attach-javadoc</id>
            <phase>package</phase>
            <goals><goal>javadocJar</goal></goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
