#!/bin/bash

# Exit on error
set -e

# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# Logging functions
log_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

log_warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# Validation functions
check_command() {
    if ! command -v $1 &> /dev/null; then
        log_error "$1 is not installed. Please install it first."
        exit 1
    fi
}

check_environment() {
    # Check for required tools
    check_command "node"
    check_command "npm"
    check_command "java"
    check_command "gradle"

    # Check Node.js version
    NODE_VERSION=$(node -v | cut -d. -f1 | tr -d 'v')
    if [ "$NODE_VERSION" -lt 14 ]; then
        log_error "Node.js version 14 or higher is required"
        exit 1
    fi

    # Check Java version
    JAVA_VERSION=$(java -version 2>&1 | head -n 1 | cut -d'"' -f2 | cut -d. -f1)
    if [ "$JAVA_VERSION" -lt 11 ]; then
        log_error "Java version 11 or higher is required"
        exit 1
    fi

    # Check for Android SDK
    if [ -z "$ANDROID_HOME" ]; then
        log_error "ANDROID_HOME environment variable is not set"
        exit 1
    fi
}

# Build functions
build_typescript() {
    log_info "Building TypeScript..."
    npm run clean
    if ! npm run build; then
        log_error "TypeScript build failed"
        exit 1
    fi
}

build_android() {
    log_info "Building Android..."
    cd android || exit 1

    # Check for gradle wrapper
    if [ ! -f "./gradlew" ]; then
        log_error "Gradle wrapper not found"
        exit 1
    fi

    # Clean and build
    if ! ./gradlew clean; then
        log_error "Android clean failed"
        exit 1
    fi

    if ! ./gradlew assembleRelease; then
        log_error "Android build failed"
        exit 1
    fi

    # Verify AAR file exists
    AAR_FILE="build/outputs/aar/daily-notification-release.aar"
    if [ ! -f "$AAR_FILE" ]; then
        log_error "AAR file not found at $AAR_FILE"
        exit 1
    fi

    log_info "Android build successful: $AAR_FILE"
    cd ..
}

# Main build process
main() {
    log_info "Starting build process..."
    
    # Parse command line arguments
    BUILD_PLATFORM="all"
    while [[ $# -gt 0 ]]; do
        case $1 in
            --platform)
                BUILD_PLATFORM="$2"
                shift 2
                ;;
            *)
                log_error "Unknown option: $1"
                exit 1
                ;;
        esac
    done

    # Check environment
    check_environment

    # Build TypeScript
    build_typescript

    # Build based on platform
    case $BUILD_PLATFORM in
        "android")
            build_android
            ;;
        "all")
            build_android
            ;;
        *)
            log_error "Invalid platform: $BUILD_PLATFORM. Use 'android' or 'all'"
            exit 1
            ;;
    esac

    log_info "Build completed successfully!"
}

# Run main function with all arguments
main "$@"