variables:
  GRADLE_OPTS: "-Dorg.gradle.daemon=false"
  JAVA_HOME: "/home/jonathan/.jdks/openjdk-17"

cache:
  paths:
    - .gradle/wrapper
    - .gradle/caches

stages:
  - build
  - test
  - deploy

# Build JAR files for each Minecraft & Fabric version
build_mod:
  stage: build
  before_script:
    - export PATH=$JAVA_HOME/bin:$PATH
    - java -version
  script:
    - |
      declare -a versions=("1.20" "1.20.1" "1.20.2" "1.20.3" "1.20.4")
      declare -a mappings=("1.20+build.1" "1.20.1+build.10" "1.20.2+build.4" "1.20.3+build.1" "1.20.4+build.3")
      declare -a fabric_versions=("0.83.0+1.20" "0.92.1+1.20.1" "0.91.6+1.20.2" "0.91.1+1.20.3" "0.97.0+1.20.4")

      for i in "${!versions[@]}"; do
        minecraft_version="${versions[$i]}"
        yarn_mappings="${mappings[$i]}"
        fabric_version="${fabric_versions[$i]}"

        echo "****"
        echo "Building for Minecraft Version $minecraft_version with Fabric $fabric_version\n"
        echo "****"

        # Replace versions before build attempt
        sed -i "s/minecraft_version=.*/minecraft_version=$minecraft_version/" gradle.properties
        sed -i "s/yarn_mappings=.*/yarn_mappings=$yarn_mappings/" gradle.properties
        sed -i "s/loader_version=.*/loader_version=0.15.11/" gradle.properties
        sed -i "s/fabric_version=.*/fabric_version=$fabric_version/" gradle.properties
        echo "Contents of gradle.properties:"
        cat gradle.properties
        echo ""

        # Update minecraft version dependency in fabric.mod.json
        sed -i "s/\"minecraft\": \".*\"/\"minecraft\": \"~$minecraft_version\"/" src/main/resources/fabric.mod.json
        echo "Contents of fabric.mod.json:"
        cat src/main/resources/fabric.mod.json
        echo ""

        ./gradlew build -x test
        find build/libs -type f -name '*sources*.jar' -exec rm {} \;
        mv build/libs/creaturechat-*.jar .

        if [ "$minecraft_version" == "1.20.1" ]; then
            jar_name=$(ls creaturechat-*+1.20.1.jar)
            cp "$jar_name" "${jar_name%.jar}-forge.jar"
            touch FORGE
            zip -r "${jar_name%.jar}-forge.jar" FORGE
        fi

        FABRIC_API_JAR="fabric-api-${fabric_version}.jar"
        DOWNLOAD_URL="https://github.com/FabricMC/fabric/releases/download/${fabric_version//+/%2B}/${FABRIC_API_JAR}"
        wget -q -O "${FABRIC_API_JAR}" $DOWNLOAD_URL
        ls . -la
      done
  artifacts:
    paths:
      - creaturechat-*.jar
      - fabric-api-*.jar
  tags:
    - minecraft

# Optional test (gpt 3.5)
gpt-3.5-turbo:
  stage: test
  script:
    - echo "Running tests with gpt-3.5-turbo"
    - ./gradlew test --info
  when: manual
  artifacts:
    paths:
      - build/reports/tests/test/*
  tags:
    - minecraft

# Optional test (gpt 4o)
gpt-4o:
  stage: test
  script:
    - echo "Running tests with gpt-4o"
    - export API_MODEL="gpt-4o"
    - ./gradlew test --info
  when: manual
  artifacts:
    paths:
      - build/reports/tests/test/*
  tags:
    - minecraft

# Optional test (llama3-8b)
llama3-8b:
  stage: test
  script:
    - echo "Running tests with llama3-8b"
    - export API_URL="http://127.0.0.1:4000/v1/chat/completions"
    - export API_MODEL="llama3"
    - ./gradlew test --info
  when: manual
  artifacts:
    paths:
      - build/reports/tests/test/*
  tags:
    - minecraft

# Deploy to Modrinth
Modrinth:
  stage: deploy
  when: manual
  script:
    - chmod +x ./deploy-modrinth.sh
    - ./deploy-modrinth.sh
  only:
    - develop
  artifacts:
    paths:
      - response.txt
  tags:
    - minecraft

# Deploy to CurseForge
CurseForge:
  stage: deploy
  when: manual
  script:
    - chmod +x ./deploy-curseforge.sh
    - ./deploy-curseforge.sh
  only:
    - develop
  artifacts:
    paths:
      - response.txt
  tags:
    - minecraft
