#!/bin/sh
set -e

# Create a temporary directory
WORKDIR=$(mktemp -d)
trap 'rm -rf "$WORKDIR"' EXIT

mkdir -p "$WORKDIR/test"

# Write Simple.java
cat <<EOF > "$WORKDIR/test/Simple.java"
package test;

import com.google.auto.value.AutoValue;
import com.google.gson.Gson;
import com.google.gson.TypeAdapter;

@AutoValue
public abstract class Simple {
  public abstract String name();

  public static TypeAdapter<Simple> typeAdapter(Gson gson) {
    return new AutoValue_Simple.GsonTypeAdapter(gson);
  }
}
EOF

# Write Main.java
cat <<EOF > "$WORKDIR/test/Main.java"
package test;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class Main {
  public static void main(String[] args) {
    Gson gson = new GsonBuilder()
        .registerTypeAdapter(Simple.class, Simple.typeAdapter(new Gson()))
        .create();

    // Test Simple
    String jsonSimple = "{\\"name\\":\\"test_name\\"}";
    Simple simple = gson.fromJson(jsonSimple, Simple.class);
    if (simple == null) {
        throw new RuntimeException("Deserialized Simple object is null");
    }
    if (!"test_name".equals(simple.name())) {
        throw new RuntimeException("Expected 'test_name' but got: " + simple.name());
    }

    System.out.println("Success!");
  }
}
EOF

# Define classpath and processor path
CP="/usr/share/java/gson.jar:/usr/share/java/auto-value-annotations.jar:/usr/share/java/auto-value-gson-runtime.jar:/usr/share/java/autotransient.jar"
PP="/usr/share/java/auto-value.jar:/usr/share/java/auto-value-annotations.jar:/usr/share/java/auto-value-gson-runtime.jar:/usr/share/java/auto-value-gson-extension.jar:/usr/share/java/auto-value-gson-factory.jar:/usr/share/java/auto-common.jar:/usr/share/java/javapoet.jar:/usr/share/java/gson.jar:/usr/share/java/guava.jar:/usr/share/java/escapevelocity.jar:/usr/share/java/auto-service.jar:/usr/share/java/auto-service-annotations.jar:/usr/share/java/error-prone-annotations.jar:/usr/share/java/autotransient.jar"

# Compile
javac -cp "$CP" -processorpath "$PP" -d "$WORKDIR" "$WORKDIR/test/Simple.java" "$WORKDIR/test/Main.java"

# Run
java -cp "$CP:$WORKDIR" test.Main

