#!/bin/bash

# Default values
buildType="release"
buildName="0.0.0"
buildsRef="builds.json"

# Help message
show_help() {
    echo "Usage: $0 [-t buildType] [-n buildName]"
    echo "Builds a Flutter APK with versioning support."
    echo ""
    echo "Options:"
    echo "  -t, --buildType    Build type (release or debug). Default: release"
    echo "  -n, --buildName    Build name (version). Default: 0.0.0"
    echo "  -h, --help         Show this help message"
    exit 0
}

# Parse command-line arguments
while [[ "$#" -gt 0 ]]; do
    case $1 in
        -t|--buildType) buildType="$2"; shift ;;
        -n|--buildName) buildName="$2"; shift ;;
        -h|--help) show_help ;;
        *) echo "Unknown parameter: $1"; show_help; exit 1 ;;
    esac
    shift
done

# Check if builds.json exists
if [ ! -f "$buildsRef" ]; then
    echo "File created: $buildsRef"
    echo "{\"$buildName\": 0}" > "$buildsRef"
else
    echo "File already exists: $buildsRef"
fi

# Read the JSON file
buildsMap=$(cat "$buildsRef")

# Check if buildName exists in the JSON
if jq -e --arg key "$buildName" 'has($key)' <<< "$buildsMap" > /dev/null; then
    echo "Build exists: $buildName"
    buildNumber=$(jq --arg key "$buildName" '.[$key]' <<< "$buildsMap")
    buildNumber=$((buildNumber + 1))
    echo "Next build number for $buildName: $buildNumber"
    buildsMap=$(jq --arg key "$buildName" --argjson value "$buildNumber" '.[$key] = $value' <<< "$buildsMap")
else
    echo "New build: $buildName, starting at build number: 1"
    buildNumber=1
    buildsMap=$(jq --arg key "$buildName" --argjson value "$buildNumber" '.[$key] = $value' <<< "$buildsMap")
fi

# Save the updated JSON back to the file
echo "$buildsMap" > "$buildsRef"

# Define paths
apkDir="../build/app/outputs/flutter-apk"
baseName="org.igox.apps.android.busylight-buddy"

# Build APK
echo "Building APK with arguments: --$buildType --build-name=$buildName --build-number=$buildNumber --target-platform=android-arm,android-arm64,android-x64"
flutter build apk --"$buildType" --build-name="$buildName" --build-number="$buildNumber" --target-platform=android-arm,android-arm64,android-x64

# Rename APK
oldApk="$apkDir/app-$buildType.apk"
newApk="$apkDir/$baseName-$buildType.apk"
if [ -f "$oldApk" ]; then
    if [ -f "$newApk" ]; then
        rm -f "$newApk"
    fi
    mv "$oldApk" "$newApk"
    echo "APK renamed to: $baseName-$buildType.apk"
else
    echo "Warning: APK not found at $oldApk"
fi

# Rename SHA1 (if exists)
oldSha1="$apkDir/app-$buildType.apk.sha1"
newSha1="$apkDir/$baseName-$buildType.apk.sha1"
if [ -f "$oldSha1" ]; then
    if [ -f "$newSha1" ]; then
        rm -f "$newSha1"
    fi
    mv "$oldSha1" "$newSha1"
    echo "SHA1 renamed to: $baseName-$buildType.apk.sha1"
else
    echo "Warning: SHA1 not found at $oldSha1"
fi